停止運行ExecutorService中的線程


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,不去判斷什么鎖不鎖。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM