为什么主线程在等待

sro*_*ock 1 java multithreading

在下面的代码中,为什么主线程要等到子线程完成.

Driver.java

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

ThreadRunner.java

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

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

Aas*_*set 5

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

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