“Thread termination due to failure” 是指什么?

4 浏览
0 Comments

“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所指的“失败”是指什么样的失败呢?

0
0 Comments

当调用execute()方法时,如果线程抛出异常,线程执行器会生成一个新的线程。而当调用submit()方法时,线程抛出的异常不会传递给线程池,因此不会生成新的线程。

0
0 Comments

“线程终止由于失败”指的是什么?

0