我希望快速提问。如果我在Java中调用一个对象中的notify,是否保证在调用notify之后不会唤醒任何等待(严格)的线程。或者换句话说,确实只通知唤醒已经在等待的线程。据推测,notifyAll
的行为方式相同。
例如,如果保证不成立,则可以按此顺序:
感谢您的帮助!
答案 0 :(得分:0)
当您通知时,其中一个正在等待的线程(如果有)将被唤醒。当前没有等待这个对象的线程无法唤醒,线程还没有等待(但是等待以后)也无法被唤醒(显然)。
如果你调用notifyAll,那么你将唤醒当前正在等待的所有线程。
我建议您阅读有关点击here
的内容答案 1 :(得分:0)
嗯,notify()
方法的javadocs清楚地说明了它:
唤醒单个线程 等待此对象的监视器。
notifyAll()
同样如此:
唤醒 等待此对象监视器的所有线程。
为了放置在等待线程的队列中,线程必须首先获取对象的锁,然后释放它,然后只有其他一些线程才能获得锁并调用notify()
。
所以我想你不用担心它。