在多線程裏面可以進行守護線程的定義,也就是說如果現在主線程或其他線程還在運行,那麼守護線程將一直存在,並且運行在後臺狀態。
Thread類中關於守護線程的操作如下:
- 設置爲守護線程:public final void setDaemon(boolean on);
- 判斷是否守護線程:public final boolean isDaemon();
範例:使用守護線程
public class Main{
public static boolean flag = true;
public static void main(String args[]) throws Exception {
Thread userThread = new Thread(()-> {
for(int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在運行、i = " + i);
}
}, "用戶線程"); // 核心功能
Thread daemonThread = new Thread(()-> {
for(int i = 0; i < Integer.MAX_VALUE; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在運行、i = " + i);
}
}, "守護線程"); // 核心功能
userThread.start();
daemonThread.setDaemon(true);
daemonThread.start();
}
}
運行結果:
可以發現所有的守護線程都是圍繞在用戶線程的周圍,如果程序執行完畢了(所有用戶線程結束)守護線程也就消失了。在整個JVM裏最大的守護線程就是GC線程。GC進行的是垃圾回收工作。