为什么调用Thread.currentThread.interrupt()catch 块中的方法?
Thread.currentThread.interrupt()
这样做是为了 保持状态 。
当您捕获InterruptedException并吞下它时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。
InterruptedException
通过调用Thread.currentThread().interrupt(),您设置了线程的中断标志,因此更高级别的中断处理程序会注意到它并可以适当地处理它。
Thread.currentThread().interrupt()
Java Concurrency inPractice在 第 7.1.3 章:响应中断 中更详细地讨论了这一点。它的规则是:
只有实现线程中断策略的代码才能吞下中断请求。通用任务和库代码不应该吞下中断请求。