等待和通知的顺序

时间:2013-04-07 16:27:45

标签: java wait notify

我希望快速提问。如果我在Java中调用一个对象中的notify,是否保证在调用notify之后不会唤醒任何等待(严格)的线程。或者换句话说,确实只通知唤醒已经在等待的线程。据推测,notifyAll的行为方式相同。

例如,如果保证不成立,则可以按此顺序:

  1. 线程N获取锁定,调用notify,并释放锁定。
  2. 线程W获得锁定,调用wait并释放锁定。
  3. 线程W被线程N的通知唤醒并继续......
  4. 感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

当您通知时,其中一个正在等待的线程(如果有)将被唤醒。当前没有等待这个对象的线程无法唤醒,线程还没有等待(但是等待以后)也无法被唤醒(显然)。

如果你调用notifyAll,那么你将唤醒当前正在等待的所有线程。

我建议您阅读有关点击here

的内容

答案 1 :(得分:0)

嗯,notify()方法的javadocs清楚地说明了它:

  

唤醒单个线程 等待此对象的监视器。

notifyAll()同样如此:

  

唤醒 等待此对象监视器的所有线程。

为了放置在等待线程的队列中,线程必须首先获取对象的锁,然后释放它,然后只有其他一些线程才能获得锁并调用notify()

所以我想你不用担心它。