猿问
什么是线程虚假唤醒
JAVA文档上有提到线程虚假唤醒的概念,但是解释的不是明了
请问如何理解线程虚假唤醒?在什么情况下会发生?
动漫人物
浏览 952
回答 6
6回答
慕婉清6462132
虚假唤醒就是一些obj.wait()会在除了obj.notify()和obj.notifyAll()的其他情况被唤醒,而此时是不应该返回的,所以要加条件判断。如下是一个很好的代码实践:[code]synchronized (obj) {while ()obj.wait();... // Perform action appropriate to condition}[/code]
0
0
0
海绵宝宝撒
A thread wake upwithout being notified, interrupted, or timing out, is so-called spurious wakeup
0
0
0
喵喔喔
有一个情形就会,很多阻塞的api采用轮询的方式来监测是否有中断调用,在轮询过程中,线程从活动到休眠,又从休眠到活动,如此往复的检查中断,但是从整个api的角度来看,这个线程是处于休眠状态,但是用Thread相关方法判断,则可能会出现线程是alive的如果采用操作系统调用才实现限时、可中断的api则不会有这样的问题
0
0
0
慕斯709654
楼上所说,这种实现是会出问题的,因为在轮询切换时,可能会漏掉notify的中断,从而无休止的休眠下去。
0
0
0
holdtom
[quote]这种实现是会出问题的,因为在轮询切换时,可能会漏掉notify的中断,从而无休止的休眠下去。[/quote]wait方法用这种方式是有问题,非wait的阻塞接口可以这样实现
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
我要回答