为什么主线程没有终止
Why the main thread is not terminated
据我所知,未捕获的线程将与当前线程一起终止。
在下面的代码中,main方法已经执行了,但是为什么没有终止呢?
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.execute(() -> {
while (true) {
throw new RuntimeException();
}
});
}
您的运行时异常发生在 ExecutorService 线程池中。它捕获并吞下异常并且线程保持 运行.
当至少有一个非守护线程 运行 时,应用程序将保持 运行。你有 2 个 运行(在池中)。
现在,如果在离开主线程之前调用 executorService.shutdown(),那么它将完成 运行 所有任务,然后应用程序将退出。
据我所知,未捕获的线程将与当前线程一起终止。 在下面的代码中,main方法已经执行了,但是为什么没有终止呢?
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.execute(() -> {
while (true) {
throw new RuntimeException();
}
});
}
您的运行时异常发生在 ExecutorService 线程池中。它捕获并吞下异常并且线程保持 运行.
当至少有一个非守护线程 运行 时,应用程序将保持 运行。你有 2 个 运行(在池中)。
现在,如果在离开主线程之前调用 executorService.shutdown(),那么它将完成 运行 所有任务,然后应用程序将退出。