有没有notify()可能造成僵局的情况,但是notifyAll()- 从来没有?
例如,在多个锁的情况下.notify()通知只运行一个线程,它检查对某个对象的锁定并再次等待,但另一个线程可以解锁该对象.在使用的情况下,notifyAll()将通知所有线程运行,其中一个轮流将确保解锁该对象.
是.想象一下,你实现了生产者 - 消费者问题synchronize, wait, and notify.(编辑)其中2个生产者和2个消费者都在同一个对象监视器上等待(结束编辑).生产者调用notify此实现.现在假设您有两个运行Producer代码路径的Threads.Producer1可能会调用notify并唤醒Producer2.Producer2意识到他不能做任何工作,随后无法打电话notify.现在你陷入僵局.
(编辑)如果notifyAll被叫过,那么除了Producer2之外,Consumer1和Consumer2都会被唤醒.其中一个消费者会消耗这些数据,然后调用notifyAll唤醒至少一个生产者,从而允许非常破碎的实施成功地跛行.
以下是基于我的情景的参考问题: 我的生产消费者挂起