为什么主线程在等待

时间:2016-03-31 01:30:33

标签: java multithreading

在下面的代码中,为什么主线程一直等到子线程完成。

Driver.java

public class Driver {
public static void main(String[] args) throws InterruptedException {
    Thread t = new Thread(new ThreadRunner());
    t.start();
}
}

ThreadRunner.java

public class ThreadRunner implements Runnable {
@Override
public void run() {
    for (int i = 0; i < 10; i++) {
        System.out.println("Child thread" + i);
    }
}
}

这里在调用't.start()后的Driver类中不应该退出程序吗?我没有使用join,但主线程仍在等待新旋转的'ThreadRunner'运行。是因为在java中主线程(由main方法启动)总是等待所有线程关闭?

3 个答案:

答案 0 :(得分:5)

主线程在启动另一个线程后立即退出,但只要有非守护程序线程处于活动状态,Java程序就会继续运行(除非您特别请求它,否则新线程将是非守护进程)

使线程成为守护程序线程很简单:只需在启动它之前调用t.setDaemon(true);即可。

答案 1 :(得分:2)

主线程实际上并没有等待。主线程完成。程序不会退出,因为您创建了一个非守护进程的Thread。只剩下守护程序线程时,JVM将关闭。

答案 2 :(得分:-1)

你可以添加'System.out.println(“主线程”);'低于't.start()'

然后你可以看到主线程是第一个。