91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java及python中如何守護線程Daemon

發布時間:2021-10-14 15:23:07 來源:億速云 閱讀:126 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關java及python中如何守護線程Daemon,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

1.所謂守護線程就是運行在程序后臺的線程,程序的主線程Main(比方java程序一開始啟動時創建的那個線程)不會是守護線程. 2.Daemon thread在Java里面的定義是,如果虛擬機中只有Daemon thread 在運行,則虛擬機退出。 

 虛擬機中可能會同時有很多個線程在運行,只有當所有的非守護線程都結束的時候,虛擬機的進程才會結束,不管在運行的線程是不是main()線程。3.Main主線程結束了(Non-daemon thread),如果此時正在運行的其他threads是daemon threads,JVM會使得這個threads停止,JVM也停下.  

 如果此時正在運行的其他threads有Non-daemon threads,那么必須等所有的Non daemon線程結束了,JVM才會停下來.4.總之,必須等所有的Non-daemon線程都運行結束了,只剩下daemon的時候,JVM才會停下來,注意Main主程序是Non-daemon線程. public class A  

implements Runnable{  

public void run() { for(;;){ System.out.println("hello world"); } } public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub Thread thread = new Thread(new A()); //thread.setDaemon(true);  

 //設置為守護進程thread.start(); Thread.sleep(3000); } }

source:http://www.fu-he.com/java/jishu_d.asp?id=3823

后臺線程與setDaemon()方法

核心提示:對Java程序來說,只要還有一個前臺線程在運行,這個進程就不會結束,如果一個進程中只有后臺線程在運行,這個進程就會結束。前臺線程是相對后臺線程而言的,前面所介紹的線程都是前臺線程。那么什么樣的線程是后臺線程呢?如果某個線程對象在啟動(調用start()方法)之前調用了setDaemon(true)方法,這個線程就變成了后臺線程。下面來看一下進程中只有后臺線程在運行的情況,如下所示:范例:Threa...

對Java程序來說,只要還有一個前臺線程在運行,這個進程就不會結束,如果一個進程中只有后臺線程在運行,這個進程就會結束。前臺線程是相對后臺線程而言的,前面所介紹的線程都是前臺線程。那么什么樣的線程是后臺線程呢?如果某個線程對象在啟動(調用start()方法)之前調用了setDaemon(true)方法,這個線程就變成了后臺線程。下面來看一下進程中只有后臺線程在運行的情況,如下所示:

范例:ThreadDaemon.java

01 public class ThreadDaemon

02 {

03 public static void main(String args[])

04 {

05 ThreadTest t = new ThreadTest() ;

06 Thread tt = new Thread(t) ;

07 tt.setDaemon(true) ; // 設置后臺運行

08 tt.start();

09 }

10 }

11

12 class ThreadTest implements Runnable

13 {

14 public void run()

15 {

16 while(true)

17 {

18 System.out.println(Thread.currentThread().getName()+"is running.");

19 }

20 }

21 }

從上面的程序和運行結果(圖9-4)上,可以看到:雖然創建了一個無限循環的線程,但因為它是后臺線程,整個進程在主線程結束時就隨之終止運行了。這驗證了

進程中只有后臺線程運行時,進程就會結束的說法。


source:http://blog.csdn.net/m13666368773/article/details/7245570 Thread.setDaemon的用法,經過學習以后了解:

1. setDaemon需要在start方法調用之前使用

2. 線程劃分為用戶線程和后臺(daemon)進程,setDaemon將線程設置為后臺進程

3. 如果jvm中都是后臺進程,當前jvm將exit。(隨之而來的,所有的一切煙消云散,包括后臺線程啦)

4. 主線程結束后,

      1) 用戶線程將會繼續運行

      2) 如果沒有用戶線程,都是后臺進程的話,那么jvm結束

 

另外:

setDaemon方法把java的線程設置為守護線程,此方法的調用必須在線程啟動之前執行。只有在當前jvm中所有的線程都為守護線程時,jvm才會退出。

如果創建的線程沒有顯示調用此方法,這默認為用戶線程。

實例如下:

package com.jack.mySample;   

  

import java.io.IOException;   

  

public class TestThread extends Thread {   

       

    public TestThread() {   

    }   

    /** *//**  

     * 線程的run方法,它將和其他線程同時運行  

     */  

    public void run(){   

        for(int i = 1; i <= 100; i++){   

            try{   

                Thread.sleep(100);   

                   

            } catch (InterruptedException ex){   

                ex.printStackTrace();   

            }   

            System.out.println(i);   

        }   

    }   

    public static void main(String [] args){   

        TestThread test = new TestThread();   

        // 如果不設置daemon,那么線程將輸出100后才結束   

        test.setDaemon(true);   

        test.start();   

        System.out.println("isDaemon = " + test.isDaemon());   

        try {   

            System.in.read(); // 接受輸入,使程序在此停頓,一旦接收到用戶輸入,main線程結束,守護線程自動結束   

        } catch (IOException ex) {   

            ex.printStackTrace();   

        }   

    }   

 

補充說明:

定義:守護線程--也稱“服務線程”,在沒有用戶線程可服務時會自動離開。

優先級:守護線程的優先級比較低,用于為系統中的其它對象和線程提供服務。

設置:通過setDaemon(true)來設置線程為“守護線程”;將一個用戶線程設置為

      守護線程的方式是在 線程對象創建 之前 用線程對象的setDaemon方法。

example: 垃圾回收線程就是一個經典的守護線程,當我們的程序中不再有任何運行的

      Thread,程序就不會再產生垃圾,垃圾回收器也就無事可做,所以當垃圾回收線程是

      JVM上僅剩的線程時,垃圾回收線程會自動離開。它始終在低級別的狀態中運行,用于

      實時監控和管理系統中的可回收資源。

生命周期:守護進程(Daemon)是運行在后臺的一種特殊進程。它獨立于控制終端并且

      周期性地執行某種任務或等待處理某些發生的事件。也就是

      說守護線程不依賴于終端,但是依賴于系統,與系統“同生共死”。那Java的守護線程是

      什么樣子的呢。當JVM中所有的線程都是守護線程的時候,JVM就可以退出了;如果還有一個

      或以上的非守護線程則JVM不會退出。



初次碰到這個方法,就被這個怪里怪氣的拼寫單詞懵了下,查API又覺得理解得不深刻,那還是查下Daemon這個詞有什么意思,什么詞源吧。Daemon 中的 ae 為一個音,重音在 /di:/ 上,好象是指希臘守護神的意思吧。在計算機專業英語中是守護線程的意思。原以為如果一個線程被光榮地定義為守護線程,一定會直到進程運行到最后一刻,但真錯了,如果一個線程是守護線程,那么,主線程運行結束時,如果沒有任何非守護線程在運行,守護線程就會自盡了。
setDaemon方法是Thread中的方法,默認為false狀態,將該線程標記為守護線程或用戶線程,該方法必須在啟動線程前調用,具有最低的優先級,讓系統資源優先調用其他線程。當正在運行的線程都是守護線程時,Java 虛擬機退出。


如下邊這個小程序如示:

import java.io.IOException;

class TestMain4 extends Thread {
   public void run() {            //永真循環線程
       for(int i=0;;i++){
           try {
               Thread.sleep(1000);
           } catch (InterruptedException ex) {   }
           System.out.println(i);
       }
   }

   public static void main(String [] args){
      TestMain4 test = new TestMain4();
      test.setDaemon(true);    //調試時可以設置為false,那么這個程序是個死循環,沒有退出條件。設置為true,即可主線程結束,test線程也結束。
       test.start();
       System.out.println("isDaemon = " + test.isDaemon());
       try {
           System.in.read();   // 接受輸入,使程序在此停頓,一旦接收到用戶輸入,main線程結束,守護線程自動結束
       } catch (IOException ex) {}
   }
}


關于java及python中如何守護線程Daemon就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大邑县| 阳东县| 静海县| 漠河县| 吉首市| 金山区| 台北县| 宁明县| 榆树市| 当雄县| 利辛县| 宝鸡市| 兴化市| 永登县| 嘉善县| 松阳县| 连江县| 文登市| 白水县| 新绛县| 铜山县| 上杭县| 遂平县| 开远市| 阿坝县| 漯河市| 茂名市| 芦溪县| 麦盖提县| 江华| 荔波县| 万盛区| 依兰县| 收藏| 碌曲县| 乐山市| 南昌县| 太白县| 潮安县| 萨迦县| 肥西县|