为什么守护程序线程在非守护程序线程完成后执行?

时间:2018-05-26 13:18:05

标签: multithreading

我编写了一个程序,我在其中运行一个守护程序线程和一个非守护程序线程。根据理论,只要非守护程序线程执行完成,JVM就会终止守护程序线程执行。但是当我运行我的程序时,即使在非守护程序线程完成之后,守护程序线程也在执行。为什么呢?

我写的程序是

class DaemonDemo implements Runnable {

    Thread th;

    DaemonDemo() {
        th = new Thread(this);

        th.setDaemon(true);
        th.start();
    }

    public void run() {
        System.out.println("Run: " + th.isDaemon());

        for (int i = 1; i <= 10; i++) {
            System.out.println("Run: " + i);
        }
    }
}

public class Test_DaemonDemo {

    public static void main(String[] args) {

        DaemonDemo dd = new DaemonDemo();

        System.out.println("Main Countdown Starts");

        for (int i = 1; i <= 10; i++) {
            System.out.println("main: " + i);
        }
    }
}

输出

Main Countdown Starts
Run: true
main: 1
Run: 1
main: 2
Run: 2
main: 3
Run: 3
main: 4
Run: 4
main: 5
Run: 5
main: 6
Run: 6
main: 7
Run: 7
main: 8
main: 9
main: 10
Run: 8
Run: 9
Run: 10

我不知道为什么守护程序线程在非守护程序线程完成后仍在运行?

1 个答案:

答案 0 :(得分:0)

这只是主线程终止与守护程序线程突然终止之间的延迟问题。

将守护程序的线程循环数增加到100。

它不会太远。