从何处捕获从 Callable.call() 引发的异常

可能的重复:
处理 Java 执行器服务任务中的异常

我使用来自Java的来协调线程。用于启动我使用的线程ExecutorService

pool = new ExecutorService(2);
callableResults = pool.invokeAll(threads);

为了收集结果,我为每个线程使用。“线程”是类中的对象列表,它实现并重写 。future.get()Callablecall()

现在我遇到了以下问题。该方法会引发各种特定异常。 并仅投掷 .call()invokeAll()future.get()InterruptedException

我在哪里可以捕捉到我投入的特定异常?还是我必须在那里处理它们?如果抛出其中一个异常,则结果是否为 ?call()InterruptedException


答案 1

AFAIR java.util.concurrent.Future.get() 如果过去提供了可调用的 throw 异常,则将抛出 ExecutionException(异常存储在 )。Future

尝试检索通过引发异常而中止的任务的结果时引发的异常。可以使用 Throwable.getCause() 方法检查此异常


答案 2