java - ExecutorService 中的 InterruptedException

标签 java concurrency interrupted-exception

当在由 ExecutorService 管理的任务中捕获 InterruptedException 时,我们是否应该设置中断标志?或者我们应该吞下 InterruptedException

例子:

final ExecutorService service = ...;
final Object          object  = ...;

service.submit(() -> {
    try {
        while (!condition) {
            object.wait();
        }
    } catch (final InterruptedException exception) {
        Thread.currentThread().interrupt(); // yes or no?
    }
});

最佳答案

在提交给 ExecutorService 的任务中,接收中断是取消任务执行的信号。所以,在你的代码示例中,答案是“否”,不要再设置中断。

据我在源代码中所见,重新断言中断状态将被忽略,但它确实浪费了执行程序中的一些工作,因为如果立即引发 InterruptedException工作线程尝试获取另一个任务,然后根据执行程序的状态确定该任务是虚假的并被清除。

及时关闭执行器取决于响应中断而退出的任务;它不依赖于恢复中断状态的任务。

关于java - ExecutorService 中的 InterruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36364224/

相关文章:

java - Mobicents JAIN SLEE 中的部署顺序

java - 在 Map 中,如果我们使用现有键进行修改,我们不会得到 ConcurrentModificationException

java - CAS 和非阻塞计数器

android - 调试Android应用程序时出现InterruptedException

java - 在线程中断的情况下提取进程退出代码

java - 将上下文从一个通量/单声道传递到另一个

java - Jframe 执行时大小不正确,有什么原因吗?

c++ - 并发引用计数器类和作用域保留 : is this ok?

java - Future.cancel() 方法不起作用

java - Java 的反射如何影响其内存占用?