是否在 ExecutorService 中吞下 InterruptedException?

Swallow InterruptedException in ExecutorService or not?

IBM 有一篇文章。 https://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-#2.1

这表示永远不要吞下 interruptedException。声纳也是一样。

不应忽略“InterruptedException”。

但是Whosebug上有一个关于Executorservice内部interruptedException的问题,提示我们不要再设置中断了。

IBM的文章是不是比较老了,没有考虑现代的Java并发包? 我们应该如何处理ExecutorService中的interruptedException?

您应该在所有陷入 InterruptedException 的地方做出决定,因为这取决于情况和您的代码的重要性。

对于您的任务来说,一个明智的反应是注意中断,允许优雅地取消或关闭当前线程或执行程序中的 Runnable。在 Runnable 的最外层重置 Thread.currentThread().interrupt() 没有多大意义(因为线程将在之后退出,或者 Executor 正在管理该中断)。

但是,如果您在任务控制下方的几层调用堆栈中捕获该异常,则重置 Thread.currentThread().interrupt() 可能有助于更高级别的任务查看并优雅地退出 - 但前提是他们正在检查 Thread.currentThread().isInterrupted() 在每个阶段或您的代码传递 InterruptedException 或特定于应用程序的异常。