java - 下面的任务会捕获异常吗?

标签 java multithreading exception executorservice

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 的循环中中断

  1. 在这种情况下,我们会遇到任务 5 抛出的异常吗?

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

最佳答案

异常将由task5抛出,但执行器将捕获它并将其包装为ExecutionException

在这种情况下,除非您调用 futureOfTask5.get(),否则异常不会被重新抛出。

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

关于java - 下面的任务会捕获异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49516463/

相关文章:

Java程序编辑文件以选择记录

java - 如何打印二叉树?

c++ - pthread_cond_timedwait 立即返回 ETIMEDOUT

java - 如何使用 REST 服务处理客户端-服务器应用程序中的错误?

python - pip install 请求异常和 pip install beautifulsoup4 异常

java - 我不确定在 try 语句中添加什么内容,并且不断收到 "Ecxeption in thread "main""错误

java - 逐行读取文本区域并分配变量

Java:尽可能有效地比较哈希集

java - 如何从 JFrame 中删除 JPanel?

java - 当两个线程同时执行cache.putIfAbsent时会发生什么?