gpt4 book ai didi

java - Oracle 的 jvm 中的 notify() 实现

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

我的印象是大多数人只使用 Oracle(最初来自 Sun microsystems)提供的 jvm 实现。如果我错了,请纠正我。

当我浏览 API for notify() 时,它说:

Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation.

我想知道在 Oracle 的 jvm 中调用 notify() 时,等待线程将被以什么顺序调用。

您可能想知道为什么我不考虑使用 notifyAll() 而只是停止担心。但是,当我可以用 notify() 只调用一个线程时,我为什么要调用所有不必要的等待线程呢?即使我使用 notifyAll(),我也无法控制哪个等待线程将获得监视器。

Oracle 应该在上面给出的 api 链接中记录它是如何在自己的实现中实现的。

最佳答案

线程的执行顺序未定义。

如果您基于可以预测执行顺序的假设编写任何代码,它最多只能在一台机器上运行。因此,Oracle 实际如何实现它是无关紧要的(研究案例除外),因为它可能在下一台机器上甚至在下一版本的 Oracle JVM 上以不同的方式实现。

如果您需要更细粒度的控制,那么您需要调整您的架构并使用concurrent package中的类以适当的方式。 Synchronized/wait/notify 只是线程同步的一个非常基本的“强力”实现,具有许多陷阱和限制。

关于java - Oracle 的 jvm 中的 notify() 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20376109/

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