“Thread termination due to failure” 是指什么?
“Thread termination due to failure” 是指什么?
ExecutorService
的Javadoc有时会提到当线程由于“失败”而终止的情况,但是这种失败是指什么类型的失败并不清楚。例如,单线程执行器的文档说:
如果此单个线程在关闭之前在执行期间由于失败而终止,如果有需要执行后续任务,将会有新的线程取代它。
我本以为在出现异常或者RuntimeException
的情况下可能会发生这种情况,但似乎并非如此。运行以下代码似乎会得到相同的线程名称和线程ID。
ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(() -> { System.out.println("Hello from " + Thread.currentThread().getName()+ " " + Thread.currentThread().getId()); throw new NullPointerException("Test"); }); executor.submit(() -> { System.out.println("Hello 2 from " + Thread.currentThread().getName() + " " + Thread.currentThread().getId()); });
该代码的输出是:
Hello from pool-1-thread-1 12 Hello 2 from pool-1-thread-1 12
似乎即使在出现NullPointerException
的情况下,同一个线程仍然被重用。那么Javadoc所指的“失败”是指什么样的失败呢?