日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

线程自动退出_什么是Java的守护线程?

發布時間:2023/12/19 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程自动退出_什么是Java的守护线程? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
守護線程是一種支持性線程,主要用于后臺調度以及支持性的工作。守護線程具備自動結束生命周期的特性,而非守護線程則不具備。如果對上面的概念一知半解的話,我們先來看一個簡單的例子,明白守護線程的執行情況:public class MyDaemon implements Runnable { @Override public void run() { System.out.println("********守護線程********"); }}public class MyDaemonTest { public static void main(String[] args) { Thread thread = new Thread(new MyDaemon(), "守護線程"); thread.setDaemon(true); thread.start(); System.out.println("******main線程執行結束******"); }}

請猜測一下上面的執行結果,如果多次執行就會發現,運行的結果會有兩種情況。第一種情況最容易出現,第二種情況在多次運行上面的程序之后偶爾會出現。

******main線程執行結束************main線程執行結束**************守護進程********

這里如果不明白守護進程的真正意義就會存在疑問,為什么會出現上面的兩種情況呢?這里我根據這個例子再次解釋下文章開頭對守護線程的描述。

首先一個線程的運行肯定是由另外一個線程啟動的,在上面的例子中我們運行了“main()”方法,也就是啟動了一個主線程。然后“main()”方法中調用了我們自定義的線程“MyDaemon()”,之后我們給“MyDaemon()”這個線程設置成為了守護進程。守護進程有個特點就是當所有非守護線程都運行結束時,JVM退出,進程結束。我來畫個圖給大家解釋一下這句話的意思。

為了驗證上述的表達,我們在將之前的“MyDaemon()”進行一下修改,然后對比一下結果:

public class MyDaemon implements Runnable { @Override public void run() { while (true) { System.out.println("********守護進程********"); } }}

把“MyDaemonTest()”中的守護進程設置為false。

public class MyDaemonTest { public static void main(String[] args) { Thread thread = new Thread(new MyDaemon(), "守護進程"); thread.setDaemon(false); thread.start(); System.out.println("******main線程執行結束******"); }}

這個線程運行之后的執行結果是“MyDaemon()”中的內容一致循環不斷地輸出,JVM不會退出。

我們再來對比下面這個稍微改動的程序,只需要把上述的“thread.setDaemon(false)”修改成“thread.setDaemon(true)”即可:

public class MyDaemonTest { public static void main(String[] args) { Thread thread = new Thread(new MyDaemon(), "守護進程"); thread.setDaemon(true); thread.start(); System.out.println("******main線程執行結束******"); }}

這次運行結果是JVM可以自動退出。

假如在主要線程運行的時候,你還想讓一個不太重要的線程執行任務,但是又想等主要線程退出時不太重要的線程也立刻結束。或許你想到了使用中斷的方式,但是如果將不太重要的線程設置為守護進程使用則更加簡單。

注意:在構建Daemon線程時,不能依靠finally塊中的內容來確保執行關閉或清理資源 的邏輯,因為它有可能沒有被執行就已經退出了。

總結

以上是生活随笔為你收集整理的线程自动退出_什么是Java的守护线程?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。