【问题标题】:How java ThreadPool is designed to handle thread exception scenario?java ThreadPool 是如何设计处理线程异常场景的?
【发布时间】:2017-12-17 17:31:03
【问题描述】:

我有一个runnable,它总是抛出一些异常,比如NullPointerException。 我将 100000 个这样的 runnable 提交给 ThreadPool 大小为 100 的线程池。在这种情况下会发生什么。线程池如何处理异常?

【问题讨论】:

    标签: java multithreading thread-safety threadpool java.util.concurrent


    【解决方案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);
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2010-10-14
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      相关资源
      最近更新 更多