Thread.setDaemon(true)开启守护线程,守护线程就是在后台运行的线程,它会随着父线程结束而结束。 Daemon 线程中产生的新线程也是 Daemon 的。当 JVM 中所有的线程都是守护线程的时候, JVM 就可以退出了;如果还有一个或以上的非守护线程则 JVM 不会退出。
可以看下面的代码:
public class DaemonThreadTest {
public static void main(String[] args) {
new Thread(()-> {
Thread thread = new Thread(() -> {
for (int i = 0; true; i++) {
System.out.println("我会一直运行运行…………"+i);
}
});
thread.setDaemon(true);
thread.start();
System.out.println("父线程,我要退出了");
}).start();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("JVM退出了");
}
}
输入如下:
父线程,我要退出了
我会一直运行运行…………0
我会一直运行运行…………1
我会一直运行运行…………2
我会一直运行运行…………3
我会一直运行运行…………4
我会一直运行运行…………5
我会一直运行运行…………6
......
我会一直运行运行…………98
我会一直运行运行…………99
JVM退出了
我会一直运行运行…………100
我会一直运行运行…………101
......
我会一直运行运行…………121
我会一直运行运行…………122