面試官: 談談什麼是守護線程以及做用 ?

文章首發自微信公衆號: 小哈學Javahtml

我的網站: https://www.exception.site/java-concurrency/java-concurrency-daemon-threadjava

什麼是守護線程

目錄

1、什麼是守護線程git

2、守護線程的做用及應用場景github

3、總結面試

1、什麼是守護線程

守護線程相對於正常線程來講,是比較特殊的一類線程,那麼它特殊在哪裏呢?別急,在瞭解它以前,咱們須要知道一個問題,那就是:微信

JVM 程序在什麼狀況下可以正常退出?多線程

The Java Virtual Machine exits when the only threads running are all daemon threads.學習

上面這句話來自 JDK 官方文檔,意思是:網站

當 JVM 中不存在任何一個正在運行的非守護線程時,則 JVM 進程即會退出。spa

理解起來有點拗口,看完下面的代碼你就懂了 。^_^

示例代碼

  • **①:**建立一個非守護線程;
  • **②:**模擬非守護線程不退出的狀況;
  • **③:**啓動線程;
  • **④:**主線程即將退出;

運行這段代碼,猜猜看,JVM 進程是否可以正常退出呢?

運行代碼

能夠看到由於有一個非守護線程一直在後臺運行着,JVM 沒法正常退出。那麼,若是說正在運行的是個守護線程,結果又會怎麼樣呢?

設置該線程爲守護線程

  • **①:**添加一個鉤子(Hook)線程, 用來監聽 JVM 退出,並輸出日誌;

關於 Hook (鉤子) 線程能夠看我以前的文章:《Java 多線程之 Hook (鉤子) 線程》

  • **②:**經過 setDaemon(true)將該線程爲守護線程;

再次運行代碼,瞅瞅效果:

第二次運行示例代碼

能夠看到,當主線程退出時,JVM 會隨之退出運行,守護線程同時也會被回收,即便你裏面是個死循環也不礙事。

2、守護線程的做用及應用場景

經過上面的示例代碼,相信你已經瞭解了守護線程和普通線程之間的區別,那麼,咱們來討論一下爲何須要守護線程,以及什麼時候使用,它的應用場景是什麼?

上面,咱們已經知道了,若是 JVM 中沒有一個正在運行的非守護線程,這個時候,JVM 會退出。換句話說,守護線程擁有自動結束本身生命週期的特性,而非守護線程不具有這個特色

JVM 中的垃圾回收線程就是典型的守護線程,若是說不具有該特性,會發生什麼呢?

當 JVM 要退出時,因爲垃圾回收線程還在運行着,致使程序沒法退出,這就很尷尬了!!!因而可知,守護線程的重要性了。

一般來講,守護線程常常被用來執行一些後臺任務,可是呢,你又但願在程序退出時,或者說 JVM 退出時,線程可以自動關閉,此時,守護線程是你的首選。

3、總結

本文中,咱們學習了什麼是守護線程,經過示例代碼瞭解了守護線程的特性,以及守護線程的做用,和應用場景。最後,若是看完此文有所收穫,不妨點個關注哈。

4、GitHub 示例源碼

https://github.com/weiwosuoai/java-concurrent-tutorial/tree/master/DaemonThread

贈送 | 面試&學習福利資源

最近在網上發現一個不錯的 PDF 資源《Java 核心面試知識.pdf》分享給你們,不光是面試,學習,你都值得擁有!!!

獲取方式: 關注公衆號: 小哈學Java, 後臺回覆 資源,既可獲取資源連接,下面是目錄以及部分截圖:

福利資源截圖

福利資源截圖

福利資源截圖

福利資源截圖

福利資源截圖

福利資源截圖

福利資源截圖

重要的事情說兩遍,獲取方式: 關注公衆號: 小哈學Java, 後臺回覆 資源,既可獲取資源連接 !!!

歡迎關注微信公衆號: 小哈學Java

小哈學Java

原文出處:https://www.cnblogs.com/quanxiaoha/p/10731361.html

相關文章
相關標籤/搜索