从Callable.call()抛出异常的位置

时间:2012-03-02 14:20:34

标签: java multithreading exception executorservice callable

  

可能重复:
  Handling exceptions from Java ExecutorService tasks

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

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

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

现在我遇到了以下问题。方法call()确实抛出了各种特定的异常。 invokeAll()future.get()仅投放InterruptedException

我可以在哪里抓住我投入call()的特定例外情况?或者我必须在那里处理它们?如果抛出其中一个异常,那么结果是InterruptedException

1 个答案:

答案 0 :(得分:29)

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

  

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