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 处理请求

java核心知识点 --- 线程池ThreadPool

Threadpool 如何重用线程以及它是如何工作的

如何配置IIS处理多并发请求及存在的问题

C# ThreadPool QueueUserWorkItem 异常处理

ZeroC ICE的远程调用框架 ThreadPool