2014-10-10 117 views
1

這是我的計劃,其中線程的主要方法如何確保在主線程停止之前所有線程都已停止?

public class ThreadTest { 
    public static void main(String args[]) throws InterruptedException { 
     Thread mainThread = Thread.currentThread(); 
     Thread t1 = new Thread() { 
      public void run() { 
       while (true) { 
        System.out.println("Hi"); 
       } 
      } 
     }; 
     // t1.setDaemon(true); 
     t1.start(); 

    } 
} 

下開始我如何確保主線程停止之前所有的子線程被停止?

我不想使用守護程序選項。這可能嗎?

+0

您可以枚舉所有線程和檢查teyr狀態。但是你想解決什麼問題?如果發現某個線程沒有停止,你會做什麼? – talex 2014-10-10 08:57:26

+1

線程完成後你要做什麼,即你爲什麼在意? – 2014-10-10 09:57:22

回答

4

在主線程中,您可以等待其他線程完成。

在主線程中執行的方法做(在您的示例中的主要方法):

​​

但請記住,如果t1寫不完主線程將永遠不會結束。所以你migth想用 連接超時。

t1.join(10000); 
+0

子線程加入主線程,這將等到子線程完成後再繼續。 – 2014-10-10 08:57:36

+0

@PuWang會的。這是OP要求的。不是嗎? – 2014-10-10 08:58:30

1

只需添加t1.join()添加方法的末尾:

t1.start(); 
t1.join(); 

主線程會等待,直到T1完成。

2

使用t1.join(),join()方法使主線程或任何其他線程,在它被調用,等到這個任務將結束,然後繼續它的工作。在你的情況下,你的程序將永遠不會完成執行,直到致電System.exit(0);或使t1.join(1000); // wait only for one second

0

如果你有一個以上的子線程,建議您嘗試信號

0
t1.join(); 
System.out.println(mainThread.getName()); 
System.out.println(t1.getName()); 

主線程將等到T1的執行完畢