26

可能重复:
处理来自 Java ExecutorService 任务的异常

我使用ExecutorServicefrom Java 来协调线程。为了启动我使用的线程

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

为了收集结果,我future.get()为每个线程使用。“线程”是实现Callable和覆盖的类中的对象列表call()

现在我遇到了以下问题。该方法call()确实会引发各种特定的异常。invokeAll()并且future.get()只扔InterruptedException

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

4

1 回答 1

39

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

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

于 2012-03-02T14:25:37.347 回答