有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是我的程序,其中线程在main方法下启动

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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

    t1.join();
    

    但是请记住,如果t1永远不会完成,那么主线程将永远不会完成。所以你可能想用 加入暂停

    t1.join(10000);
    
  3. # 3 楼答案

    如果你有多个子线程,建议你试试这个信号

  4. # 4 楼答案

    只要加上t1。join()添加方法的结尾:

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

    主线程将等待t1完成

  5. # 5 楼答案

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

    主线程将等待t1的执行完成