我使用Java中的ExecutorService
来协调线程。
为了启动线程我使用
pool = new ExecutorService(2);
callableResults = pool.invokeAll(threads);
为了收集结果,我为每个线程使用future.get()
。
“threads”是一个实现Callable
并覆盖call()
的类的对象列表。
现在我遇到了以下问题。方法call()
确实抛出了各种特定的异常。 invokeAll()
和future.get()
仅投放InterruptedException
。
我可以在哪里抓住我投入call()
的特定例外情况?或者我必须在那里处理它们?如果抛出其中一个异常,那么结果是InterruptedException
?
答案 0 :(得分:29)
如果过去提供了可调用的异常,则AFAIR java.util.concurrent.Future.get()
会抛出ExecutionException
(异常存储在Future
中)。
尝试检索因抛出异常而中止的任务的结果时抛出异常。 可以使用
Throwable.getCause()
方法检查此例外。