【发布时间】:2013-12-04 13:01:34
【问题描述】:
我的印象是大多数人只使用 Oracle 提供的 jvm 实现(最初来自 Sun 微系统)。如果我错了,请纠正我。
当我通过API for notify() 时,它说:
唤醒在此对象的监视器上等待的单个线程。如果 任何线程都在等待这个对象,其中一个被选为 醒来。 选择是任意的,由以下人员自行决定 实施。
我想知道在 Oracle 的 jvm 中调用 notify() 时会以什么顺序调用等待线程。
您可能想知道为什么我不考虑使用 notifyAll() 并停止担心。但是当我可以用 notify() 只调用一个线程时,我为什么要不必要地调用所有等待的线程呢?即使我使用 notifyAll(),我也无法控制哪个等待线程将获得监视器。
Oracle 应该已经在上面给出的 api 链接中记录了它是如何在自己的实现中实现的。
【问题讨论】:
-
如果您需要通知特定线程,您应该考虑使用另一个监视器来处理这种情况。
-
stackoverflow.com/questions/10684111/… 是一个关于该主题的好问题。
标签: java multithreading jvm implementation notify