我编写了一个程序,我在其中运行一个守护程序线程和一个非守护程序线程。根据理论,只要非守护程序线程执行完成,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
我不知道为什么守护程序线程在非守护程序线程完成后仍在运行?
答案 0 :(得分:0)
这只是主线程终止与守护程序线程突然终止之间的延迟问题。
将守护程序的线程循环数增加到100。
它不会太远。