如何设计java ThreadPool来处理线程异常情况?

时间:2017-07-13 05:27:12

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

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

1 个答案:

答案 0 :(得分:0)

如果您正在使用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);
            }