如何确保在主线程停止之前所有线程都已停止?

问题描述:

这是我的计划,其中线程的主要方法如何确保在主线程停止之前所有线程都已停止?

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

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

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

​​

但请记住,如果t1写不完主线程将永远不会结束。所以你migth想用 连接超时。

t1.join(10000); 
+0

子线程加入主线程,这将等到子线程完成后再继续。 – 2014-10-10 08:57:36

+0

@PuWang会的。这是OP要求的。不是吗? – 2014-10-10 08:58:30

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

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

主线程会等待,直到T1完成。

使用t1.join(),join()方法使主线程或任何其他线程,在它被调用,等到这个任务将结束,然后继续它的工作。在你的情况下,你的程序将永远不会完成执行,直到致电System.exit(0);或使t1.join(1000); // wait only for one second

如果你有一个以上的子线程,建议您尝试信号

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

主线程将等到T1的执行完毕