2013-07-17 97 views
1

当有多个线程处于等待状态时,如果我调用notify()而不是调用notifyAll()哪一个将在处于等待状态的几个线程中被通知?Java线程同步通知

+0

我不知道这个答案,但一个好主意是检查出java.concurrent包,它可以为你做很多事情。 – Fernando

+0

@Fernando他/她不是在问怎么做,而是如何运作。 – m0skit0

回答

3

这是未定义的行为。任何人都可以拿起。从JavaDoc

如果任何线程此对象上等待,它们中的一个被选择为 唤醒。 选择是任意的,并且由 实施决定。

是的,这可能导致thread starvation

1

The javadoc说:

选择是任意的,并在执行的自由裁量权发生。

1

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

虽然如前所述,特定的行为并未由Java规范定义,但我怀疑JDC实现会将线程放在特定监视器的WAIT队列的前端。但是,这不应该依赖。