【发布时间】:2018-09-06 01:46:09
【问题描述】:
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 个任务抛出异常,但循环中的第 1 个任务返回 false。 (和循环中断)。如果该任务引发异常,我想捕获它并执行一些清理逻辑。我想知道我的逻辑永远不会捕获任务 5 引发的异常,因为我从任务 1 的循环中中断
在这种情况下,我们会遇到任务 5 抛出的异常吗?
显示 threadPool.shutdownNow() 抛出任务 5 的异常?
【问题讨论】:
-
不能用两个try catch块吗?
-
你找到了原因,为什么线程内的异常不能传播到调用线程。这两个线程不共享一个共同的调用堆栈,这就是为什么调用线程将具有完全不同的上下文,很可能在您的 try/catch 块之外。
标签: java multithreading exception-handling executorservice