什麼是守護執行緒
阿新 • • 發佈:2018-12-02
1.概念
守護執行緒又被稱為“服務程序”、“精靈執行緒”或“後臺執行緒”,是指在程式執行時在後臺提供一種通用服務的執行緒,這種執行緒並不屬於程式中不可或缺的部分。通俗點講,任何一個守護執行緒都是整個JVM中所有非守護執行緒的“保姆”。
2.使用者執行緒與守護執行緒的區別
如果使用者執行緒已經全部退出執行,只剩下守護執行緒存在了,JVM也就退出了。因為當所有非守護執行緒結束時,沒有被守護者,守護執行緒也就沒有工作可做了,也就沒有繼續執行程式的必要了,程式也就終止了,同時會殺死所有守護執行緒。也就是說,只要有任何非守護執行緒還在執行,程式就不會終止。
3.區分使用者執行緒和守護執行緒
isDaemon( ),返回true為守護執行緒,反之為使用者執行緒
4.手動設定守護執行緒
在呼叫start( )前呼叫物件的setDeamon(true)方法,若將引數改為false,則表示的是使用者執行緒模式。
注意:當在一個守護執行緒中產生了其他執行緒,那麼這些新產生的執行緒預設還是守護執行緒。
class ThreadDemo extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+":begin");
try {
Thread. sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":end");
}
}
public class Test {
public static void main(String[] args) {
System.out.println("test3:begin");
Thread t1 = new ThreadDemo();
t1.setDaemon(true);
t1. start();
System.out.println("test3:end");
}
}
//test3:begin
//test3:end
//Thread-0:begin
從執行結果中可以發現,沒有輸出Thread-0:end。之所以結果是這樣,是在啟動執行緒前將其設定為守護執行緒了,當程式中只有守護執行緒存在時,JVM是可以退出的,也就是說,當JVM中只有守護執行緒執行時,JVM會自動關閉。因此,當test3方法呼叫結束後,main執行緒將退出,此時執行緒t1還處於休眠狀態沒有執行結束,但是由於此時只有這個守護執行緒在執行,JVM將會關閉,因此不會輸出Thread-0:end。