小编典典

为什么在 catch InterruptException 块中调用 Thread.currentThread.interrupt()?

all

为什么调用Thread.currentThread.interrupt()catch 块中的方法?


阅读 59

收藏
2022-07-27

共1个答案

小编典典

这样做是为了 保持状态

当您捕获InterruptedException并吞下它时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。

通过调用Thread.currentThread().interrupt(),您设置了线程的中断标志,因此更高级别的中断处理程序会注意到它并可以适当地处理它。

Java Concurrency inPractice在 第 7.1.3
章:响应中断
中更详细地讨论了这一点。它的规则是:

只有实现线程中断策略的代码才能吞下中断请求。通用任务和库代码不应该吞下中断请求。

2022-07-27