本帖最后由 记得上线 于 2012-7-16 14:29 编辑
陆鹏 发表于 2012-7-16 12:00
那当有两个线程在同步代码块里“睡着了”,也就是wait()了。
第三个线程如main 万一开启了 notifyAll,那 ...
哥们
调用notifyAll通知所有线程继续执行,只能有一个线程在执行,其余的线程在等待(因为在所有线程被唤醒的时候在synchornized块中)。这时的等待和调用notifyAll前的等待是不一样的。
notifyAll前:在对象上休息区内休息
notifyAll后:在排队等待获得对象锁。
notify()与notifyAll()的区别 notify和notifyAll都是把某个对象上休息区内的线程唤醒,notify只能唤醒一个,但究竟是哪一个不能确定,而notifyAll则唤醒这个对象上的休息室中所有的线程.
一般有为了安全性,我们在绝对多数时候应该使用notifiAll(),除非你明确知道只唤醒其中的一个线程.
|