我在 Effective Java 这本书中看到了 Bloch 给出的一个示例代码,如下所示:
现在,我想澄清一下调用了 Thread.currentThread().interrupt()
的目的。我读了书中给出的解释,但仍感到困惑:
有没有人能够进一步解释一下呢?
我在 Effective Java 这本书中看到了 Bloch 给出的一个示例代码,如下所示:
现在,我想澄清一下调用了 Thread.currentThread().interrupt()
的目的。我读了书中给出的解释,但仍感到困惑:
有没有人能够进一步解释一下呢?
当你捕获到InterruptedException
时,线程的中断标志会被清除。通过调用Thread.currentThread().interrupt()
,您可以再次设置中断标志,以便栈上更高层次的客户端知道线程已被中断并相应地做出反应。在这个例子中,Executor
就是一个这样的客户端。
您可能希望阅读这篇文章获取更详细的解释。
interrupt
在调用它的地方不会抛出异常,它会导致任何等待线程的东西抛出异常。谢谢。 - T.J. Crowderawait()
这样的方法被中断或在中断线程中调用时,中断标志被清除,因此后续调用不会因为先前的中断而立即停止。catch
子句重新中断线程,以便标志仍然设置,并且run
之外的代码知道它已被中断并适当地处理它(通常是关闭工作线程)。