我是否应该在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?
}
});
答案 0 :(得分:2)
在提交给ExecutorService
的任务中,接收中断是取消执行任务的信号。因此,在您的代码示例中,答案为“否”,请勿再次设置中断。
就我在源代码中看到的那样,重新断言中断状态将被忽略,但它确实在执行程序中浪费了一些工作,因为如果工作线程会立即引发InterruptedException
尝试获取另一个任务,然后根据执行者的状态确定它是虚假的并清除。
及时关闭执行程序取决于响应中断而退出的任务;它不依赖于恢复中断状态的任务。
答案 1 :(得分:0)
正如这个好article建议的那样,不要吞下InterruptedException。