我读了“Effective Java”给出的示例代码,如下所示:
现在,我想明确指出Thread.currentThread().interrupt()
的目的是什么。我读了那本书给出的解释,但我仍然感到困惑:
任何人都可以进一步解释它吗?
答案 0 :(得分:6)
当您捕获InterruptedException时,将清除线程的中断标志。通过调用Thread.currentThread().interrupt()
,您可以再次设置中断标志,因此堆栈上方的客户端知道线程已被中断并可以做出相应的反应。在示例中,Executor
就是这样一个客户端。
您可以阅读this article以获得更详尽的解释。
答案 1 :(得分:2)
当一个像await()
这样的方法在被中断的线程中被中断或被调用时,清除了interruped标志,因此后续的调用不会因为一个普通的中断而立即停止。
为了避免这种情况,catch
子句重新中断线程,因此标志仍然打开,run
之外的代码知道它被中断并适当地处理它(通常关闭工人)。