ExecutorService中的InterruptedException

时间:2016-04-01 19:17:37

标签: java concurrency interrupted-exception

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

示例:

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

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

2 个答案:

答案 0 :(得分:2)

在提交给ExecutorService的任务中,接收中断是取消执行任务的信号。因此,在您的代码示例中,答案为“否”,请勿再次设置中断。

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

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

答案 1 :(得分:0)

正如这个好article建议的那样,不要吞下InterruptedException。