java學習Java程式設計:什麼是守護執行緒?
Java提供了兩種執行緒:守護執行緒與使用者執行緒。
守護執行緒又被稱為服務程式、精靈執行緒、後臺執行緒,是指在程式執行時在後臺提供一種通用服務的執行緒,這種執行緒並不屬於程式中不可或缺的部分。通俗點講,任何一個守護執行緒都是整個JVM中所有非守護執行緒的 “保姆”。
使用者執行緒和守護執行緒幾乎一樣,唯一的不同之處就在於如果使用者執行緒已經全部退出執行,只剩下守護執行緒存在了,JVM也就退出了。因為當所有非守護執行緒結束時,沒有了被守護者, 守護執行緒沒有工作可做,也就沒有繼續執行程式的必要了,程式也就終止了,同時會 “殺死”所有守護執行緒。也就是說,只要有任何非守護執行緒還在執行,程式就不會終止。
在Java語言中,守護執行緒一般具有較低的優先順序,它並非只由JVM內部提供,使用者在編寫程式時也可以自己設定守護執行緒。例如,將一個使用者執行緒設定為守護執行緒的方法就是在呼叫 start()方法啟動執行緒之前呼叫物件的setDaemon(true)方法,若將以上引數設定為false,則表示是使用者程式模式。
需要注意的是,當在一個守護執行緒中產生了其他執行緒,那麼這些新產生的執行緒預設還是守護執行緒,使用者執行緒也是如此,示例如下:
class ThreadDemo extends Thread {
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("test:begin");
Thread tl = new ThreadDemo();
tl. setDaemon(true);
tl. start();
System. out. println( " test:end");
}
程式執行結果為:
test:begin
test:end
Thread - 0:begin
從執行結果中可以發現,沒有輸出“Thread-0:end”。之所以結果是這樣,是在啟動執行緒前將其設定為守護執行緒了,當程式中只有守護執行緒存在時,JVM是可以退出的,也就是說,當 JVM中只有守護執行緒執行時,JVM會自動關閉。因此,當test方法呼叫結束後,main執行緒將退出,此時執行緒tl還處於休眠狀態沒有執行結束,但是由於此時只有這個守護執行緒在執行, JVM將會關閉,因此不會輸出“Thread - 0:end”。
守護執行緒的一個典型的例子就是垃圾回收器。只要JVM啟動,它始終在執行,實時監控和管理系統中可以被回收的資源。
相關文章
- 【多執行緒與高併發】Java守護執行緒是什麼?什麼是Java的守護執行緒?執行緒Java
- 【Java面試】什麼是守護執行緒,它有什麼特點Java面試執行緒
- java 多執行緒守護執行緒Java執行緒
- Java之守護執行緒Java執行緒
- Java多執行緒之守護執行緒實戰Java執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- java.lang.Thread中守護執行緒Javathread執行緒
- Java併發程式設計:Java執行緒Java程式設計執行緒
- Java併發程式設計學習筆記----執行緒池Java程式設計筆記執行緒
- 守護執行緒執行緒
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- java 執行緒學習Java執行緒
- 《java學習三》併發程式設計 -------執行緒池原理剖析Java程式設計執行緒
- 【java】【多執行緒】睡眠/守護/加入/禮讓執行緒,執行緒優先順序(4)Java執行緒
- 好程式設計師Java學習路線分享多執行緒概念程式設計師Java執行緒
- Java多執行緒學習Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- Java基礎之多執行緒程式設計Java執行緒程式設計
- java併發程式設計——執行緒池Java程式設計執行緒
- java併發程式設計——執行緒同步Java程式設計執行緒
- 好程式設計師Java學習路線Java bean是個什麼概念程式設計師JavaBean
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java 併發程式設計學習筆記 05 :如何暫停執行緒?Java程式設計筆記執行緒
- Java併發程式設計之執行緒安全、執行緒通訊Java程式設計執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- 好程式設計師Java學習路線介紹Java到底是什麼?程式設計師Java
- 守護石談學習Java之路Java
- Java 多執行緒NIO學習Java執行緒
- 【java學習】ThreadPoolExecutor 執行緒池Javathread執行緒
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- Java併發程式設計-執行緒基礎Java程式設計執行緒
- Java併發程式設計:執行緒池ThreadPoolExecutorJava程式設計執行緒thread
- Java-基礎程式設計-多執行緒Java程式設計執行緒
- Java多執行緒程式設計—鎖優化Java執行緒程式設計優化
- java併發程式設計 | 執行緒詳解Java程式設計執行緒
- 好程式設計師Java學習路線分享maven是什麼程式設計師JavaMaven
- Java實驗五: Java多執行緒程式設計(頭歌)Java執行緒程式設計
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒