Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么主线程要等待_Java_Multithreading - Fatal编程技术网

Java 为什么主线程要等待

Java 为什么主线程要等待,java,multithreading,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 Ru

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

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);
    }
}
}
公共类ThreadRunner实现可运行{
@凌驾
公开募捐{
对于(int i=0;i<10;i++){
System.out.println(“子线程”+i);
}
}
}

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

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


使线程成为守护进程线程很容易:只需调用
t.setDaemon(true)主线程在启动另一个线程后立即退出,但只要存在非守护进程线程,Java程序作为一个整体将继续运行(除非您特别请求,否则新线程将是非守护进程)


使线程成为守护进程线程很容易:只需调用
t.setDaemon(true)主线程实际上并不等待。主线程完成。程序不会退出,因为您创建了一个非守护进程的
线程。当只剩下守护进程线程时,JVM将关闭。

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

您可以添加“System.out.println(“主线程”);”在“t.start()下面”


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

您可以添加'System.out.println(“主线程”);'在“t.start()下面”

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