比如说有两类线程A、B、C和a b c
分别占有两个队列
那两个队列可以看作临界资源
如果a线程调用notifyAll()
能唤醒ABC的线程吗
肯定能唤醒bc两个线程
那A、B、C呢

解决方案 »

  1.   

    notifyAll()方法是唤醒所有wait()的线程的意思,让他们重新获得资源,进入就绪状态,排队等待时间片的获得。并不是因为分资源来唤醒吧,A,B,C应该也会被唤醒。
      

  2.   

    这取决于a,b,c和A,B,C是否共用synchronize资源
    a能唤醒b,c,是因为a,b,c共用了一个队列,如果A,B,C用的是另一个队列,那么a的notifyAll对A,B,C并不产生任何影响
    用代码简单地说明
    synchronized(queue1) {
        ...
        queue1.notifyAll(); //这个notifyAll只会影响使用queue1的线程,不会影响queue2的线程
    }synchronized(queue2) {
       ...
       queue2.notifyAll(); //这个notifyAll只会影响使用queue2的线程,不会影响queue1的线程
    }
    所以你的问题的答案,取决于A,B,C是否和a,b,c使用了共同的资源,简单地说就是是否共用了同一段synchronized代码