try {
for (final Future<Boolean> bool : threadPool.invokeAll(tasks)) {
if (!bool.get()) {
return false;
}
}
return true;
} finally {
threadPool.shutdownNow();
threadPool.awaitTermination(
IMPORT_THREADS_AWAIT_TERMINATION_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS);
}
假设任务可以抛出异常。假设有 5 个任务,第 5 个任务抛出异常,但循环中的第一个任务返回 false。 (和循环中断)。如果该任务引发异常,我想捕获它并执行一些清理逻辑。我想知道我的逻辑永远不会捕获任务 5 抛出的异常,因为我从任务 1 的循环中中断
在这种情况下,我们会遇到任务 5 抛出的异常吗?
显示threadPool.shutdownNow()抛出任务5的异常?
最佳答案
异常
将由task5
抛出,但执行器
将捕获它并将其包装为ExecutionException
。
在这种情况下,除非您调用 futureOfTask5.get()
,否则异常
不会被重新抛出。
您可以在task5
的call
方法中添加try...catch
block 来记录它。
关于java - 下面的任务会捕获异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49516463/