当在由 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/