如果没有调用notify(),等待线程会发生什么?这算是虚假唤醒吗?
如果一个等待Thread
没有在其所等待的对象上调用notify()
或notifyAll()
方法进行通知,那么以下任何一种情况都可能发生:
Thread
将继续在对象的等待池中等待。Thread
会变得可运行,如果指定了超时时间并且已经超过了该时间。Thread
被中断,然后再次变为可运行状态。Thread
由于没有任何原因而醒来,即既没有收到通知也没有被中断。最后一种情况被称为虚假唤醒,这是在唤醒线程后,线程应始终检查它正在等待的条件是否成立的原因之一。如果不成立,则Thread
应再次调用wait()
方法并继续等待。
notifyAll()
? - Aniket Thakurwait()
的特定代码发生了什么,您应该发布该代码。虚假唤醒很少见,如果您再次运行程序,则不太可能重复出现。因此,如果您可以重现此问题,则可能不是虚假唤醒。 - RealSkepticwait()
的重载方法,那么该线程可以被唤醒。除此之外,这是一个罕见的情况! - Prashant