为什么主线程没有终止

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(),那么它将完成 运行 所有任务,然后应用程序将退出。