1 while(true){ 2 try { 3 sleep(1000); 4 } catch (InterruptedException e) { 5 // TODO Auto-generated catch block 6 e.printStackTrace(); 7 } 8 }
像如上代碼,使用ExecutorService對象調用shutdownNow方法或shutdown方法,線程都不會停止。要想停止線程需要改成如下代碼:
1 while (!Thread.interrupted()) { 2 3 4 5 try { 6 sleep(1000); 7 } catch (InterruptedException e) { 8 e.printStackTrace(); 9 //終結循環 10 Thread.currentThread().interrupt(); 11 }
shutdownNow方法與shutdown方法的區別:
1、shutdown方法: 這個方法,只能立刻interrupt那些目前沒有任務,處於等待狀態從blockingQueue獲取任務的異常。而不能interrupt那些在任務執行過程中的thread,或者是任務執行過程中掛起的thread。
2、shutdownNow方法: 不管任務是否在執行中,一律interrupt,不去判斷什么鎖不鎖。
