如何处理InterruptException

  应该算是初级问题吧,但之前的确不知道,解决这个问题的契机,还是因为最近我集成了 Sonar 代码质量管理工具,针对 Tread.sleep() 方法抛出的 InterruptException ,工具要求不能只进行简单的捕获及日志记录。

  以此为契机,我了解了 InterruptException 的处理方法,及 多线程 中断的机制。

  之前我一直认为 线程A 调用 线程B 的 interrupt 方法,是立即就中断 B 线程的,然而了解之后,我才发现,并不是这样,interrupt方法只是改了一个标识, java里面能终止线程的,只有自己,其他线程只是发起了中断请求。

  也就是说,A调用B的中断方法,B的中断标识发生改变,B需要自己检测监控该状态,在检测到中断状态后,需要自己处理好中断前的资源释放的操作,然后自己了结自己。

  当A调用B的中断方法时,如果B的线程正在进行阻塞(例如 sleep、wait 等),那么此时就会抛出 InterruptExcpetion,同时B线程的中断状态会被重置false,此时两种处理办法: 一、在捕获到InterruptException时,可以将该线程的中断状态重新置为true,并记录日志。这样做相当于维持B线程中断状态不变。 二、将异常继续抛出。

 

 参考:

https://blog.csdn.net/jiadajing267/article/details/80590000

https://blog.csdn.net/u012572955/article/details/55211649

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值