我希望快速的问题。如果我使用Java中的对象调用notify,是否保证不唤醒在调用notify之后等待(严格)的任何线程。换句话说,通知只唤醒已经在等待的线程。据推测,notifyAll
将表现相同的方式。等待和通知的顺序
例如,如果保证不成立的话,那就在这个顺序是可能的:
- 线程n取得锁,来电通知,并释放锁。
- 线程W获得锁,调用等待并释放锁。
- 主题W由线程唤醒狮集团的通知,并继续...
感谢您的帮助!
我希望快速的问题。如果我使用Java中的对象调用notify,是否保证不唤醒在调用notify之后等待(严格)的任何线程。换句话说,通知只唤醒已经在等待的线程。据推测,notifyAll
将表现相同的方式。等待和通知的顺序
例如,如果保证不成立的话,那就在这个顺序是可能的:
感谢您的帮助!
当你调用通知正在等待的线程之一(如果有的话)将被唤醒。当前没有等待这个对象的线程不能被等待,并且线程没有等待(但是稍后会等待)也不能被唤醒(显然)。
如果您调用notifyAll,则会唤醒当前正在等待的所有线程。
我建议你阅读命中here
那么,对于notify()
方法的javadoc明确规定,即:
唤醒在一个线程是等待在该对象的监视器上。
为notifyAll()
同样的事情:
唤醒在是等待在该对象的监视器上的全部线程。
为了被放置在等待线程队列,线程必须首先获得该对象的锁,然后释放它,然后才其他线程将能够获得锁定并调用notify()
。
所以我想你不必担心它。