gpt4 book ai didi

Java - notify() 与 notifyAll() - 可能的死锁?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:56:52 28 4
gpt4 key购买 nike

是否有任何情况 notify() 会导致死锁,但 notifyAll() - 永远不会?

例如,在多个锁的情况下。 notify() 只通知一个线程运行,它检查某个对象的锁并再次等待,尽管另一个线程可以解锁该对象。在使用 notifyAll() 的情况下,将通知所有线程运行,并且其中一个线程将依次解锁该对象。

最佳答案

是的。想象一下,您使用 synchronize、wait 和 notify 来实现生产者 - 消费者问题。 (edit) 其中2个生产者和2个消费者都在同一个对象监视器上等待(结束编辑)。生产者在这个实现中调用notify .现在假设您有两个线程运行生产者的代码路径。 Producer1 可能会调用 notify 并唤醒 Producer2。 Producer2 意识到他不能做任何工作,因此未能调用 notify。现在你陷入了僵局。

(edit) 如果调用了 notifyAll,那么除了 Producer2 之外,Consumer1 和 Consumer2 都会被唤醒。其中一位消费者会消耗数据,然后调用 notifyAll 唤醒至少一个生产者,从而让非常糟糕的实现成功地一瘸一拐地进行。

这是我的场景所依据的引用问题: My Produce Consumer Hangs

关于Java - notify() 与 notifyAll() - 可能的死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807715/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com