为什么主线程没有终止

时间:2019-08-15 03:36:54

标签: java threadpool main executorservice

据我所知,未捕获的线程将以当前线程终止。 在下面的代码中,main方法已经执行,但是为什么不终止呢?

public static void main(String[] args) {
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    executorService.execute(() -> {
        while (true) {
            throw new RuntimeException();
        }
    });
}

1 个答案:

答案 0 :(得分:7)

您的运行时异常发生在ExecutorService线程池中。它捕获并吞下异常,并且线程继续运行。
当至少有一个非守护线程正在运行时,应用程序将继续运行。您有2个正在运行(在池中)。 现在,如果在离开主线程之前调用executorService.shutdown(),它将完成所有任务的运行,然后应用程序将退出。