【发布时间】:2017-12-17 17:31:03
【问题描述】:
我有一个runnable,它总是抛出一些异常,比如NullPointerException。 我将 100000 个这样的 runnable 提交给 ThreadPool 大小为 100 的线程池。在这种情况下会发生什么。线程池如何处理异常?
【问题讨论】:
标签: java multithreading thread-safety threadpool java.util.concurrent
我有一个runnable,它总是抛出一些异常,比如NullPointerException。 我将 100000 个这样的 runnable 提交给 ThreadPool 大小为 100 的线程池。在这种情况下会发生什么。线程池如何处理异常?
【问题讨论】:
标签: java multithreading thread-safety threadpool java.util.concurrent
如果您使用 ExecutorService 提供的线程池,则任何异常都不会影响工作线程。例如,如果您使用 callable,那么它将调用名为 futureTask 的包装器,如果您的方法抛出任何异常,它将处理.
来自 Java API 的源代码
Callable<V> c = callable;
if (c != null && state == NEW) {
V result;
boolean ran;
try {
result = c.call();
ran = true;
} catch (Throwable ex) {
result = null;
ran = false;
setException(ex);
}
if (ran)
set(result);
}
【讨论】: