请问如何解决不同线程之间数据的共享的问题,例如A线程从一个监听端口将一个对象取出来之后,B线程需要A线程的处理结果,根据得到的对象来作相应的处理。然后将结果用socekt传到指定的端口中去。请问这样的共享如何保证同步和防止死锁呢?

解决方案 »

  1.   

    我的想法大概是这样,启动A B线程,让B线程先等待,等A线程执行结束后激活B线程,这时B线程在去调用A线程处理的对象,这个想法好象能够实现楼主的疑问吧.呵呵,也许不对,在琢磨琢磨
      

  2.   

    可能我没有说的太具体。我再说详细点吧。有一个端口负责接受一个对象obj,我用线程A来接收,并对对象的合法性进行判断,如果合法则让http的请求通过,到达一个proxy代理,就是线程B,这里的proxy需要将线程A处理得到的obj写到开始http的header里面去,然后转发到webserver当中去。
    感觉用等待的方式,似乎解决不了这个问题、、、我的qq 190755556,
      

  3.   

    还是没有说清楚问题!!1. obj是由谁通过什么方式发送的?
    2. Thread A Monitor的socket与Http request是什么关系?
    3. proxy 即 Thread B与web server是什么关系?Thread B是运行于web server container内部还是另我作为一个独立的service运行的。你最好将你的问题写清楚。
      

  4.   

    感谢神鸟的关注:我再描述清楚点
    Thread A 监听5000端口,A和httprequest的关系是如果obj的验证合法就让httprequest到达指定的server。其中obj是和客户的httprequest关联的。目前我通过解析出客户端的ip+端口,以它为key值,用hashmap存储obj。Thread B,即httprequest的目标socket,它实际是一个proxy,它负责从hashmap中取得obj,并把obj添加到httprequest中。然后转发到真实的webserver当中  目前的问题就是如何解决A B 如何很好的共享obj。
      

  5.   

    补充下,Thread B 目前是做为独立的service来处理的
      

  6.   

    B在改造前的工作是如何的?你用A做一个防火墙之类的东西是么?那么B就应该是真实的Web Server了阿~
      

  7.   

    不,B是一个代理转发的服务,因为真实的webserver要用到A处理的obj的信息,我所以用B来将A处理的obj,写到header中,再转发给B。
      

  8.   

    使用spring的httpclient可以轻松地实现你的需求,很复杂的bean都可以传。