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

时间:2014-10-10 08:54:32

标签: java multithreading

这是我的程序,在主程序

下启动一个线程
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();

    }
}

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

我不想使用守护进程选项。这可能吗?

5 个答案:

答案 0 :(得分:4)

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

在主线程do执行的方法中(在您的示例中为main方法):

t1.join();

但请记住,如果t1永远不会完成,主线程永远不会完成。所以你想要使用migth 加入超时。

t1.join(10000);

答案 1 :(得分:2)

使用t1.join()join()方法使主线程或任何其他线程在调用时,等待此任务结束然后继续它的工作。在您的情况下,在致电System.exit(0);或制作t1.join(1000); // wait only for one second之前,您的计划永远不会完成执行。

答案 2 :(得分:1)

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

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

主线程将等到t1完成。

答案 3 :(得分:0)

如果您有多个子线程,建议您尝试信号

答案 4 :(得分:0)

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

主线程将等到执行t1完成