1. 概念
守护线程其实也是一个线程,它与用户线程的不同之处就在于它的生命周期,当程序中其他线程都结束时,守护线程就会结束自己的生命周期。只要程序中还有一个线程还没有结束,守护线程就会一直工作。
守护线程中产生的新线程也是守护线程
2. 守护线程的设置
t.setDaemon(true);
默认守护线程是false,需要程序员手动设置。值得注意的一点是,线程需要在start之前设置为守护线程,否则会抛出一个IllegalThreadStateException异常
3. 守护线程的应用
- GC就是一个守护线程
- 分布式系统中的心跳线程也是一个守护线程
4. 实例
package com.ywq.concurrency.MyTest;
public class TestDaemon {
public static void main(String[] args) {
Thread t1=new Thread(()->{
Thread t2=new Thread(()->{
while(true){
System.out.println("t2");
}
});
t2.setDaemon(true);
t2.start();
});
t1.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在主线程中创建一个子线程,子线程中创建一个守护线程后就停止了,让主线程休眠5秒钟,这时主线程还在运行中,所以守护线程会一直打印,5秒后,主线程也挂掉了,处了守护线程外,没有其他线程了,所以守护线程也结束了。