为了账号安全,请及时绑定邮箱和手机立即绑定

什么是线程虚假唤醒

什么是线程虚假唤醒

动漫人物 2019-03-27 22:15:00
JAVA文档上有提到线程虚假唤醒的概念,但是解释的不是明了请问如何理解线程虚假唤醒?在什么情况下会发生?
查看完整描述

6 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

虚假唤醒就是一些obj.wait()会在除了obj.notify()和obj.notifyAll()的其他情况被唤醒,而此时是不应该返回的,所以要加条件判断。如下是一个很好的代码实践:
[code]
synchronized (obj) {
while ()
obj.wait();
... // Perform action appropriate to condition
}
[/code]

查看完整回答
反对 回复 2019-04-26
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

A thread wake up
without being notified, interrupted, or timing out, is so-called spurious wakeup

查看完整回答
反对 回复 2019-04-26
?
喵喔喔

TA贡献1735条经验 获得超5个赞

有一个情形就会,很多阻塞的api采用轮询的方式来监测是否有中断调用,在轮询过程中,线程从活动到休眠,又从休眠到活动,如此往复的检查中断,但是从整个api的角度来看,这个线程是处于休眠状态,但是用Thread相关方法判断,则可能会出现线程是alive的

如果采用操作系统调用才实现限时、可中断的api则不会有这样的问题


查看完整回答
反对 回复 2019-04-26
?
慕斯709654

TA贡献1840条经验 获得超5个赞

楼上所说,这种实现是会出问题的,因为在轮询切换时,可能会漏掉notify的中断,从而无休止的休眠下去。


查看完整回答
反对 回复 2019-04-26
?
holdtom

TA贡献1805条经验 获得超10个赞

[quote]这种实现是会出问题的,因为在轮询切换时,可能会漏掉notify的中断,从而无休止的休眠下去。[/quote]

wait方法用这种方式是有问题,非wait的阻塞接口可以这样实现


查看完整回答
反对 回复 2019-04-26
  • 6 回答
  • 0 关注
  • 951 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信