在InterruptedException的catch子句中中断线程的原因是什么?

时间:2015-11-25 06:41:54

标签: java multithreading interrupt

我正在阅读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();
        }
    }
});

目前尚不清楚为什么我们中断已被中断的线程?难道你不能得到一些解释,如果我们省略这样的打扰,我们可能会遇到什么样的麻烦?

1 个答案:

答案 0 :(得分:4)

是的,没错。

当从阻塞方法抛出InterruptedException时,中断标志被清除。

正确的做法是重置中断标志(即再次中断)并尽快停止运行。重置中断标志是必要的,让执行程序(或任何其他调用代码)知道线程已被中断,从而允许它停止运行。