我正在阅读J. Bloch的Effective Java,现在我正在解释有关并发的部分。作者提供了以下示例(应用了一些修改以使其更简单):
Runnable action;
//...
executor.execute(new Runnable() {
public void run() {
ready.countDown();
try {
start.await();
action.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // <------- Here
} finally {
done.countDown();
}
}
});
目前尚不清楚为什么我们中断已被中断的线程?难道你不能得到一些解释,如果我们省略这样的打扰,我们可能会遇到什么样的麻烦?
答案 0 :(得分:4)
是的,没错。
当从阻塞方法抛出InterruptedException
时,中断标志被清除。
正确的做法是重置中断标志(即再次中断)并尽快停止运行。重置中断标志是必要的,让执行程序(或任何其他调用代码)知道线程已被中断,从而允许它停止运行。