我的程序动态生成4个线程
线程A和线程C负责生成数据
线程B和线程D负责接受数据并处理
A--C
B--D
他们之间不能交错
现在的问题是我在new这四个线程的时候分别设置线程名用于区别
但是我不知道该如何用wait()和notify()来控制指定的线程。
例如A在同步块中wait()之后,我想让C进入这个同步块并notify() A,而不是notify()其他线程
希望高手能给些代码例子,讲解清楚

解决方案 »

  1.   

    不是有NOTIFY()与NOTIFYALL()吗,敢问楼主发帖前有木看过API,其实这种问题可以独立解决
      

  2.   

    你可以先去看一下这个帖子。http://topic.csdn.net/u/20100426/16/6868d364-ee84-409b-adb3-dcef3dea4026.html
      

  3.   

    如果不想使用使用 wait, notify 之类的,纯属想省事,那使用 java.util.concurrent.LinkedBlockingQueue 是最好不过的了。
      

  4.   

    java中没有根据线程名来notify的吗?
    想让A生产,C消费,但是实际中D也会来A这里消费
    java.util.concurrent.LinkedBlockingQueue 这个还不了解,我想至少把同步块这里搞清楚再看其他的
      

  5.   

    不能根据什么线程名来 notify,只能使用当前对象锁来 notify 
      

  6.   

    那应该怎么做到 
    A生产出X,C消费X
    B生产出Y,D消费Y呢?
    我是循环生成的两组线程:
    for(int i=0;i<2;i++)
    {
        生产者  n=new 生产者();
        消费者  m=new 消费者();
        产物   int a;
    }
    实例:1 生产者A->a1->消费者C
          2 生产者B->a2->消费者D
    我要如何管理好这四个线程做到他们互不干扰呢?
      

  7.   

    wait()和notify()太老土了,现在流行使用信号量java.util.concurrent.Semaphore,可以竞争,也可以独立。楼主的需求完全可以用两个独立的信号量来解决问题。还在线程、并发、同步之间纠结的孩子们,不妨看看下面两篇文章(英文的,但绝对值得一看):
    https://www.ibm.com/developerworks/java/library/j-5things4.html
    http://www.ibm.com/developerworks/java/library/j-5things5.html