多线程问题

Biglonwl 2010-04-02 09:20:06
比如说有两类线程A、B、C和a b c
分别占有两个队列
那两个队列可以看作临界资源
如果a线程调用notifyAll()
能唤醒ABC的线程吗
肯定能唤醒bc两个线程
那A、B、C呢
...全文
73 2 打赏 收藏 转发到动态 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2010-04-02
  • 打赏
  • 举报
回复
这取决于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代码

fantasy471503202 2010-04-02
  • 打赏
  • 举报
回复
notifyAll()方法是唤醒所有wait()的线程的意思,让他们重新获得资源,进入就绪状态,排队等待时间片的获得。并不是因为分资源来唤醒吧,A,B,C应该也会被唤醒。
相关推荐

62,568

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告