1. 程式人生 > >什麼是守護執行緒

什麼是守護執行緒

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。