为什么调用Thread.currentThread()。interrupt()?

时间:2014-01-05 14:37:54

标签: java multithreading

我读了“Effective Java”给出的示例代码,如下所示:

enter image description here

现在,我想明确指出Thread.currentThread().interrupt()的目的是什么。我读了那本书给出的解释,但我仍然感到困惑:

enter image description here

任何人都可以进一步解释它吗?

2 个答案:

答案 0 :(得分:6)

当您捕获InterruptedException时,将清除线程的中断标志。通过调用Thread.currentThread().interrupt(),您可以再次设置中断标志,因此堆栈上方的客户端知道线程已被中断并可以做出相应的反应。在示例中,Executor就是这样一个客户端。

您可以阅读this article以获得更详尽的解释。

答案 1 :(得分:2)

当一个像await()这样的方法在被中断的线程中被中断或被调用时,清除了interruped标志,因此后续的调用不会因为一个普通的中断而立即停止。

为了避免这种情况,catch子句重新中断线程,因此标志仍然打开,run之外的代码知道它被中断并适当地处理它(通常关闭工人)。