【问题标题】:Why the main thread is not terminated为什么主线程没有终止
【发布时间】:2019-12-21 14:15:35
【问题描述】:

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

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

【问题讨论】:

  • 所以你运行这个程序并且它永远不会停止运行?
  • @SamOrozco 是的,你可以练习一下。

标签: java threadpool main executorservice


【解决方案1】:

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

【讨论】:

  • 这个问题的本质是守护线程和非守护线程。我会去了解他们的,谢谢你的回答。
猜你喜欢
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多