InterruptedExceptions会清除线程的中断状态
问题描述
文章图片
如图,之前有个疑问:
1处已经给thread设置了中断,当主线程执行完1后,thread再循环到2处代码时,中断状态应该是true,这是应该走不进while循环而线程结束,可是结果为啥没有结束,而是继续循环执行。
原因分析
4处抛出 InterruptedException时,相当于被动的清除了中断标记。因为JVM认为你如果catch了这个中断异常,就代表你要去处理它,所以JVM会清除中断状态,避免每次抛出异常后还需要手动去做清除中断状态等操作。这样做,如果你只是简单地catch住,并不打算处理,那么就需要恢复被清除的中断位,让上层知晓,所3处以需要再次调用interrupt()。
结论总结
【InterruptedExceptions会清除线程的中断状态】可以这样认为:main线程主动中断thread线程后,thread线程抛出异常,这时thread线程是否中断应该由thread自己决定,即在catch块中写逻辑,所以InterruptedException就去清除main线程执行后的中断状态。
推荐阅读
- 一个人的碎碎念
- 为什么你的路演总会超时()
- 时间老了
- 危险也是机会
- 你若想回到冬的身边,春也会放你走
- 微习惯复盘
- 我执意要等,是因为我相信你一定会来
- 难道你仅会钻规则的漏洞吗()
- 火锅
- 拉黑家人一整年之后,以为会快乐,最后却抑郁症!!