【问题标题】:why does the main thread wait为什么主线程等待
【发布时间】:2016-03-31 01:30:32
【问题描述】:

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

驱动程序.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 类中,程序不应该退出吗?我没有使用连接,但主线程仍在等待,直到新旋转的“ThreadRunner”运行运行。是不是因为在java中主线程(由main方法启动)总是等到所有线程都关闭?

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

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

    使线程成为守护线程很容易:只需在启动之前调用t.setDaemon(true);

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以添加 'System.out.println("main thread");'在't.start()'下面

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

        【讨论】:

          猜你喜欢
          • 2017-07-19
          • 2017-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-04
          • 2023-04-04
          • 1970-01-01
          相关资源
          最近更新 更多