下面的任务会不会捕获异常?

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

的循环中跳出
  1. 在这种情况下,我们是否会遇到任务 5 抛出的异常?

  2. 显示threadPool.shutdownNow()抛出任务5的异常?

exception 将被 task5 抛出,但 executor 将捕获它并将其包装为 ExecutionException

在这种情况下,除非您调用 futureOfTask5.get(),否则 exception 不会是 re-thrown。

您可以在task5call方法中添加try...catch块来记录它。