有没有什么情况notify()
可能会导致死锁,但是notifyAll()
- 绝不?
例如,在多个锁的情况下。notify()
仅通知一个线程运行,该线程检查某个对象的锁定并再次等待,尽管另一个线程可以解锁该对象。如果使用notifyAll()
,所有线程都会被通知运行,并且其中一个线程肯定会解锁该对象。
是的。想象一下您实现生产者 - 消费者问题synchronize, wait, and notify
. (edit)其中 2 个生产者和 2 个消费者都在同一个对象监视器上等待(编辑结束).制片人打电话notify
在此实施中。现在假设您有两个线程运行生产者的代码路径。 Producer1 可能会调用notify
并唤醒 Producer2。 Producer2 意识到他无法执行任何工作,因此无法调用notify
。现在你陷入了僵局。
(edit) Had notifyAll
被调用,那么除了 Producer2 之外,Consumer1 和 Consumer2 都会被唤醒。其中一个消费者会消耗数据并依次调用notifyAll
唤醒至少一个生产者,从而使非常糟糕的实现能够成功地一瘸一拐地前进。
这是我的场景所依据的参考问题:我的 Produce Consumer 挂起 https://stackoverflow.com/questions/3067877/my-produce-consumer-hangs
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)