1

当有多个线程处于等待状态时;如果我调用 notify() 而不是调用 notifyAll() 在处于等待状态的多个线程中会通知哪一个?

4

3 回答 3

3

那是未定义的行为。任何人都可以被接走。从JavaDoc

如果有任何线程正在等待该对象,则选择其中一个被唤醒。该选择是任意的,并由实施自行决定。

是的,这可能导致线程饥饿

于 2013-07-17T13:56:19.323 回答
2

当有多个线程处于等待状态时;如果我调用 notify() 而不是调用 notifyAll() 在处于等待状态的多个线程中会通知哪一个?

尽管如前所述,Java 规范没有定义特定的行为,但我怀疑 JDC 实现将采用特定监视器的等待队列前面的线程。然而,这不应该被依赖。

于 2013-07-17T14:07:29.347 回答
1

javadoc说:

该选择是任意的,并由实施自行决定。

于 2013-07-17T13:55:55.087 回答