awaitTermination阻塞主线程

时间:2015-11-19 12:35:05

标签: java multithreading

我有以下代码:

   ExecutorService executorService = Executors.newCachedThreadPool();
    executorService.execute(() -> {
            while(true) {
                System.out.println("Here");
            }
    });

    executorService.shutdown();
    try {
        executorService.awaitTermination(5,TimeUnit.MILLISECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("Finished");

超时后 - 5毫秒,线程停止写消息"这里"并且主线程打印"已完成",但没有任何意义的终止和等待。这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

您描述的行为与我的观察结果不符(在Windows上)。对我来说,池线程永远不会停止写作" Here"。在中间的某个地方,主要线程写了" Finished",然后程序继续打印" Here"。主线程终止了。但线程池依然存在。

关闭执行程序服务并不会中止线程。它只是不再接受新任务,并在完成后关闭线程。但是你的任务永远不会结束。