方法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()下去。