2015-11-19 43 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