在编写完代码后,我习惯性的用IDEA的SonarLint插件检查了一遍代码。
结果在我catch (InterruptedException e)的地方做了预警。
原因是我没有在catch
里边写Thread.currentThread().interrupt();
那为什么要写这个?
这是维持状态。
sleep()
,wait()
方法抛出InterruptException
异常后会清除中断标志,即把中断标志设为false。
而你又捕获InterruptException
并吞下它,这时你基本上阻止任何更高级别的方法/线程组注意到中断。这可能会导致问题。
通过调用Thread.currentThread().interrupt()
,你可以设置线程的中断标志(即把中断标志设为true),因此更高级别的中断处理程序会注意到它并且可以正确处理它。
接下来还要讨论一下在线程中调用Thread.interrupt()
意味着什么?
参考资料