下面的任务会不会捕获异常?
Will exceptions be caught in following tasks?
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 个任务抛出异常,但循环中的第一个任务 returns false。 (和循环中断)。如果该任务抛出异常,我想捕获它并执行一些清理逻辑。我想知道我的逻辑永远不会捕获任务 5 抛出的异常,因为我从任务 1
的循环中跳出
在这种情况下,我们是否会遇到任务 5 抛出的异常?
显示threadPool.shutdownNow()抛出任务5的异常?
exception
将被 task5
抛出,但 executor
将捕获它并将其包装为 ExecutionException
。
在这种情况下,除非您调用 futureOfTask5.get()
,否则 exception
不会是 re-thrown。
您可以在task5
的call
方法中添加try...catch
块来记录它。
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 个任务抛出异常,但循环中的第一个任务 returns false。 (和循环中断)。如果该任务抛出异常,我想捕获它并执行一些清理逻辑。我想知道我的逻辑永远不会捕获任务 5 抛出的异常,因为我从任务 1
的循环中跳出在这种情况下,我们是否会遇到任务 5 抛出的异常?
显示threadPool.shutdownNow()抛出任务5的异常?
exception
将被 task5
抛出,但 executor
将捕获它并将其包装为 ExecutionException
。
在这种情况下,除非您调用 futureOfTask5.get()
,否则 exception
不会是 re-thrown。
您可以在task5
的call
方法中添加try...catch
块来记录它。