2015-11-19 41 views
0

我有下面的代码:awaitTermination块主线程

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

您描述的行为与我的观察不符(在Windows上)。对我来说,游泳池线程永远不会停止写“这里”。主线程在中间某处写入“完成”,但随后程序继续打印“这里”。主线程已终止。但线程池仍然存在。

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

+0

在我的Linux机器上打印大约100次在这里,然后打印一次完成并永久封锁。 – AXSSS