2013-04-07 56 views
0

我希望快速的问题。如果我使用Java中的对象调用notify,是否保证不唤醒在调用notify之后等待(严格)的任何线程。换句话说,通知只唤醒已经在等待的线程。据推测,notifyAll将表现相同的方式。等待和通知的顺序

例如,如果保证不成立的话,那就在这个顺序是可能的:

  1. 线程n取得锁,来电通知,并释放锁。
  2. 线程W获得锁,调用等待并释放锁。
  3. 主题W由线程唤醒狮集团的通知,并继续...

感谢您的帮助!

回答

0

当你调用通知正在等待的线程之一(如果有的话)将被唤醒。当前没有等待这个对象的线程不能被等待,并且线程没有等待(但是稍后会等待)也不能被唤醒(显然)。

如果您调用notifyAll,则会唤醒当前正在等待的所有线程。

我建议你阅读命中here

0

那么,对于notify()方法的javadoc明确规定,即:

唤醒在一个线程等待在该对象的监视器上。

notifyAll()同样的事情:

唤醒在等待在该对象的监视器上的全部线程。

为了被放置在等待线程队列,线程必须首先获得该对象的锁,然后释放它,然后才其他线程将能够获得锁定并调用notify()

所以我想你不必担心它。