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秒後,主線程也掛掉了,處了守護線程外,沒有其他線程了,所以守護線程也結束了。