java中的線程分爲兩類:用戶線程、守護線程。守護線程(Daemon)是一種運行在後臺的線程服務線程,當用戶線程存在時守護線程也可以同時存在,如果用戶線程全部消失(程序執行完畢,JVM進程結束)時守護線程也會消失。
用戶線程就是用戶自己開發或者由系統分配非人防主線程,其處理的是核心功能,守護線程就像用戶線程的保鏢一樣,如果用戶線程一旦消失,守護線程就沒有存在的意義了。在java中提供有自動垃圾收集機制,實際上這就是屬於一個守護線程,當用戶線程存在時,GC線程將一直存在,如果全部的用戶線程執行完畢了,那麼GC線程就沒有存在的意義了。
java中的線程都是通過Thread類來創建的,用戶線程和守護線程除了運行模式的區別外,其他完全相同。
守護線程操作方法:
範例:使用守護線程
public class ThreadDemo334 {
public static void main(String[] args) {
Thread userThread=new Thread(()->{
for(int x=0; x<2;x++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在運行、x="+x);
}
},"用戶線程"); //完成核心業務
Thread DaemonThread=new Thread(()->{
for (int x = 0; x <Integer.MAX_VALUE; x++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在運行、x="+x);
}
},"守護線程") ; //完成核心業務
DaemonThread.setDaemon(true); //設置爲守護線程
userThread.start(); //啓動用戶線程
DaemonThread.start(); //啓動守護線程
}
}
執行結果
用戶線程正在運行、x=0
守護線程正在運行、x=0
守護線程正在運行、x=1
用戶線程正在運行、x=1
本程序定義了一個守護線程,並且該守護線程將一直進行信息的輸出,但是通過執行的結果可以發現,當用戶線程消失後守護線程也同時結束。