如何确保在主线程停止之前所有线程都已停止?
这是我的计划,其中线程的主要方法如何确保在主线程停止之前所有线程都已停止?
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();
}
}
下开始我如何确保主线程停止之前所有的子线程被停止?
我不想使用守护程序选项。这可能吗?
在主线程中,您可以等待其他线程完成。
在主线程中执行的方法做(在您的示例中的主要方法):
但请记住,如果t1
写不完主线程将永远不会结束。所以你migth想用 连接超时。
t1.join(10000);
子线程加入主线程,这将等到子线程完成后再继续。 – 2014-10-10 08:57:36
@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的执行完毕
您可以枚举所有线程和检查teyr状态。但是你想解决什么问题?如果发现某个线程没有停止,你会做什么? – talex 2014-10-10 08:57:26
线程完成后你要做什么,即你为什么在意? – 2014-10-10 09:57:22