JVM(Java虚拟机)默认有很多守护线程,比如垃圾回收线程。
什么是守护线程,Java注释有:
The Java Virtual Machine exits when the only threads running are all daemon threads.
简单翻译一下:线程分为守护线程(Daemon Thread)和用户线程(User Thread),当JVM中运行的线程全都是守护线程的时候, JVM才能结束,即进程死亡。换言之,守护线程如果一直不退出(比如死循环),JVM也是能直接退出的。
举个栗子:
// 代码块1
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
System.out.println(1000);
}
}
});
// 不设置为守护线程
//thread.setDaemon(true);
thread.start();
}
// 代码块2
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
System.out.println(1000);
}
}
});
// 设置为守护线程
thread.setDaemon(true);
thread.start();
}
代码块1运行结果:一直打印1000,不退出
代码块2运行结果:直接退出