6 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
虚假唤醒就是一些obj.wait()会在除了obj.notify()和obj.notifyAll()的其他情况被唤醒,而此时是不应该返回的,所以要加条件判断。如下是一个很好的代码实践:
[code]
synchronized (obj) {
while ()
obj.wait();
... // Perform action appropriate to condition
}
[/code]
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
A thread wake up
without being notified, interrupted, or timing out, is so-called spurious wakeup
喵喔喔
TA贡献1735条经验 获得超5个赞
有一个情形就会,很多阻塞的api采用轮询的方式来监测是否有中断调用,在轮询过程中,线程从活动到休眠,又从休眠到活动,如此往复的检查中断,但是从整个api的角度来看,这个线程是处于休眠状态,但是用Thread相关方法判断,则可能会出现线程是alive的
如果采用操作系统调用才实现限时、可中断的api则不会有这样的问题
holdtom
TA贡献1805条经验 获得超10个赞
[quote]这种实现是会出问题的,因为在轮询切换时,可能会漏掉notify的中断,从而无休止的休眠下去。[/quote]
wait方法用这种方式是有问题,非wait的阻塞接口可以这样实现
添加回答
举报
0/150
提交
取消