- 运行在程序后台的一个特殊的线程
- 当程序只剩下守护线程的时候,守护线程会自动退出
- 守护线程不能持有任何需要关闭的资源,例如打开文件等,因为虚拟机退出时,守护线程没有任何机会来关闭文件,这会导致数据丢失。
如以下代码所示
public class Demo5 {
public static void main(String[] args) {
System.out.println("主线程开始");
//守护线程
Thread t1=new Thread(()->{
System.out.println("守护线程开始");
//每隔1000毫秒打印一次,"无限执行"
while (true){
System.out.println("守护线程");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//子线程
Thread t2=new Thread(()->{
System.out.println("子线程开始");
//每隔1000毫秒打印一次
for (int i = 0; i < 5; i++) {
System.out.println("子线程");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("子线程结束");
});
//设为守护线程
t1.setDaemon(true);
t1.start();
t2.start();
System.out.println("主线程结束");
}
}
执行结果如下所示,当程序当中只剩下守护线程后,它便自动结束
主线程开始 主线程结束 守护线程开始 守护线程 子线程开始 子线程 守护线程 子线程 子线程 守护线程 子线程 守护线程 守护线程 子线程 守护线程 子线程结束



