我有以下代码:
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毫秒,线程停止写消息"这里"并且主线程打印"已完成",但没有任何意义的终止和等待。这种行为的原因是什么?
答案 0 :(得分:1)
您描述的行为与我的观察结果不符(在Windows上)。对我来说,池线程永远不会停止写作" Here"。在中间的某个地方,主要线程写了" Finished",然后程序继续打印" Here"。主线程终止了。但线程池依然存在。
关闭执行程序服务并不会中止线程。它只是不再接受新任务,并在完成后关闭线程。但是你的任务永远不会结束。