java ThreadPool 是如何设计处理线程异常场景的?
Posted
技术标签:
【中文标题】java ThreadPool 是如何设计处理线程异常场景的?【英文标题】:How java ThreadPool is designed to handle thread exception scenario? 【发布时间】:2017-12-17 17:31:03 【问题描述】:我有一个runnable,它总是抛出一些异常,比如NullPointerException。 我将 100000 个这样的 runnable 提交给 ThreadPool 大小为 100 的线程池。在这种情况下会发生什么。线程池如何处理异常?
【问题讨论】:
【参考方案1】:如果您使用 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);
【讨论】:
以上是关于java ThreadPool 是如何设计处理线程异常场景的?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Async 方法如何使用 ThreadPool 处理请求