Java多線程,判斷其他線程是否結束的方法


方法1:通過Thread類中的isAlive()方法判斷線程是否處於活動狀態。

線程啟動后,只要沒有運行完畢,都會返回true。

【注】如果只是要等其他線程運行結束之后再繼續操作,可以執行t.join(),即:在t執行完畢前掛起。

 

方法2:通過Thread.activeCount()方法判斷當前線程的線程組中活動線程的數目,為1時其他線程運行完畢。

 

方法3:通過java.util.concurrent.Executors中的方法創建一個線程池,用這個線程池來啟動線程。啟動所有要啟動的線程后,執行線程池的shutdown()方法,即在所有線程執行完畢后關閉線程池。然后通過線程池的isTerminated()方法,判斷線程池是否已經關閉。線程池成功關閉,就意味着所有線程已經運行完畢了。

示例代碼:

 1 import java.util.concurrent.ExecutorService;  
 2 import java.util.concurrent.Executors;  
 3 
 4 public class Test {  
 5   
 6     public static void main(String args[]) throws InterruptedException {  
 7         ExecutorService exe = Executors.newFixedThreadPool(50);  
 8         for (int i = 1; i <= 5; i++) {  
 9             exe.execute(new SubThread(i));  
10         }  
11         exe.shutdown();  
12         while (true) {  
13             if (exe.isTerminated()) {  
14                 System.out.println("結束了!");  
15                 break;  
16             }  
17             Thread.sleep(200);  
18         }  
19     }  
20 }

 

一個思路:

給所有的線程加上同步(同一個鎖),主線程在啟動其他所有線程后wait()。每個線程運行結束后,執行notify()方法。設定一個值為其他線程數量的int計數器count,寫一個while循環,循環條件為count-->0,循環內容為wait()。則所有線程運行結束后正好while循環結束。

致命缺陷:如果幾個線程同時運行結束,有可能在主線程還沒運行時,已經執行了好幾次notify()方法。如果這樣的話,while循環就永遠不會結束了,主線程一直wait()下去。
一個思路


免責聲明!

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



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