這篇文章將為大家詳細(xì)講解有關(guān)java及python中如何守護(hù)線程Daemon,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),綏中企業(yè)網(wǎng)站建設(shè),綏中品牌網(wǎng)站建設(shè),網(wǎng)站定制,綏中網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,綏中網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1.所謂守護(hù)線程就是運(yùn)行在程序后臺(tái)的線程,程序的主線程Main(比方j(luò)ava程序一開(kāi)始啟動(dòng)時(shí)創(chuàng)建的那個(gè)線程)不會(huì)是守護(hù)線程. 2.Daemon thread在Java里面的定義是,如果虛擬機(jī)中只有Daemon thread 在運(yùn)行,則虛擬機(jī)退出。
虛擬機(jī)中可能會(huì)同時(shí)有很多個(gè)線程在運(yùn)行,只有當(dāng)所有的非守護(hù)線程都結(jié)束的時(shí)候,虛擬機(jī)的進(jìn)程才會(huì)結(jié)束,不管在運(yùn)行的線程是不是main()線程。3.Main主線程結(jié)束了(Non-daemon thread),如果此時(shí)正在運(yùn)行的其他threads是daemon threads,JVM會(huì)使得這個(gè)threads停止,JVM也停下.
如果此時(shí)正在運(yùn)行的其他threads有Non-daemon threads,那么必須等所有的Non daemon線程結(jié)束了,JVM才會(huì)停下來(lái).4.總之,必須等所有的Non-daemon線程都運(yùn)行結(jié)束了,只剩下daemon的時(shí)候,JVM才會(huì)停下來(lái),注意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);
//設(shè)置為守護(hù)進(jìn)程thread.start(); Thread.sleep(3000); } }
source:http://www.fu-he.com/java/jishu_d.asp?id=3823
后臺(tái)線程與setDaemon()方法
核心提示:對(duì)Java程序來(lái)說(shuō),只要還有一個(gè)前臺(tái)線程在運(yùn)行,這個(gè)進(jìn)程就不會(huì)結(jié)束,如果一個(gè)進(jìn)程中只有后臺(tái)線程在運(yùn)行,這個(gè)進(jìn)程就會(huì)結(jié)束。前臺(tái)線程是相對(duì)后臺(tái)線程而言的,前面所介紹的線程都是前臺(tái)線程。那么什么樣的線程是后臺(tái)線程呢?如果某個(gè)線程對(duì)象在啟動(dòng)(調(diào)用start()方法)之前調(diào)用了setDaemon(true)方法,這個(gè)線程就變成了后臺(tái)線程。下面來(lái)看一下進(jìn)程中只有后臺(tái)線程在運(yùn)行的情況,如下所示:范例:Threa... |
對(duì)Java程序來(lái)說(shuō),只要還有一個(gè)前臺(tái)線程在運(yùn)行,這個(gè)進(jìn)程就不會(huì)結(jié)束,如果一個(gè)進(jìn)程中只有后臺(tái)線程在運(yùn)行,這個(gè)進(jìn)程就會(huì)結(jié)束。前臺(tái)線程是相對(duì)后臺(tái)線程而言的,前面所介紹的線程都是前臺(tái)線程。那么什么樣的線程是后臺(tái)線程呢?如果某個(gè)線程對(duì)象在啟動(dòng)(調(diào)用start()方法)之前調(diào)用了setDaemon(true)方法,這個(gè)線程就變成了后臺(tái)線程。下面來(lái)看一下進(jìn)程中只有后臺(tái)線程在運(yùn)行的情況,如下所示: 范例: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) ; // 設(shè)置后臺(tái)運(yùn)行 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 } 從上面的程序和運(yùn)行結(jié)果(圖9-4)上,可以看到:雖然創(chuàng)建了一個(gè)無(wú)限循環(huán)的線程,但因?yàn)樗呛笈_(tái)線程,整個(gè)進(jìn)程在主線程結(jié)束時(shí)就隨之終止運(yùn)行了。這驗(yàn)證了 進(jìn)程中只有后臺(tái)線程運(yùn)行時(shí),進(jìn)程就會(huì)結(jié)束的說(shuō)法。 source:http://blog.csdn.net/m13666368773/article/details/7245570 Thread.setDaemon的用法,經(jīng)過(guò)學(xué)習(xí)以后了解:1. setDaemon需要在start方法調(diào)用之前使用 2. 線程劃分為用戶(hù)線程和后臺(tái)(daemon)進(jìn)程,setDaemon將線程設(shè)置為后臺(tái)進(jìn)程 3. 如果jvm中都是后臺(tái)進(jìn)程,當(dāng)前jvm將exit。(隨之而來(lái)的,所有的一切煙消云散,包括后臺(tái)線程啦) 4. 主線程結(jié)束后, 1) 用戶(hù)線程將會(huì)繼續(xù)運(yùn)行 2) 如果沒(méi)有用戶(hù)線程,都是后臺(tái)進(jìn)程的話,那么jvm結(jié)束
另外: setDaemon方法把java的線程設(shè)置為守護(hù)線程,此方法的調(diào)用必須在線程啟動(dòng)之前執(zhí)行。只有在當(dāng)前jvm中所有的線程都為守護(hù)線程時(shí),jvm才會(huì)退出。 實(shí)例如下: package com.jack.mySample;
補(bǔ)充說(shuō)明: 定義:守護(hù)線程--也稱(chēng)“服務(wù)線程”,在沒(méi)有用戶(hù)線程可服務(wù)時(shí)會(huì)自動(dòng)離開(kāi)。 優(yōu)先級(jí):守護(hù)線程的優(yōu)先級(jí)比較低,用于為系統(tǒng)中的其它對(duì)象和線程提供服務(wù)。 設(shè)置:通過(guò)setDaemon(true)來(lái)設(shè)置線程為“守護(hù)線程”;將一個(gè)用戶(hù)線程設(shè)置為 守護(hù)線程的方式是在 線程對(duì)象創(chuàng)建 之前 用線程對(duì)象的setDaemon方法。 example: 垃圾回收線程就是一個(gè)經(jīng)典的守護(hù)線程,當(dāng)我們的程序中不再有任何運(yùn)行的 Thread,程序就不會(huì)再產(chǎn)生垃圾,垃圾回收器也就無(wú)事可做,所以當(dāng)垃圾回收線程是 JVM上僅剩的線程時(shí),垃圾回收線程會(huì)自動(dòng)離開(kāi)。它始終在低級(jí)別的狀態(tài)中運(yùn)行,用于 實(shí)時(shí)監(jiān)控和管理系統(tǒng)中的可回收資源。 生命周期:守護(hù)進(jìn)程(Daemon)是運(yùn)行在后臺(tái)的一種特殊進(jìn)程。它獨(dú)立于控制終端并且 周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。也就是 說(shuō)守護(hù)線程不依賴(lài)于終端,但是依賴(lài)于系統(tǒng),與系統(tǒng)“同生共死”。那Java的守護(hù)線程是 什么樣子的呢。當(dāng)JVM中所有的線程都是守護(hù)線程的時(shí)候,JVM就可以退出了;如果還有一個(gè) 或以上的非守護(hù)線程則JVM不會(huì)退出。 初次碰到這個(gè)方法,就被這個(gè)怪里怪氣的拼寫(xiě)單詞懵了下,查API又覺(jué)得理解得不深刻,那還是查下Daemon這個(gè)詞有什么意思,什么詞源吧。Daemon 中的 ae 為一個(gè)音,重音在 /di:/ 上,好象是指希臘守護(hù)神的意思吧。在計(jì)算機(jī)專(zhuān)業(yè)英語(yǔ)中是守護(hù)線程的意思。原以為如果一個(gè)線程被光榮地定義為守護(hù)線程,一定會(huì)直到進(jìn)程運(yùn)行到最后一刻,但真錯(cuò)了,如果一個(gè)線程是守護(hù)線程,那么,主線程運(yùn)行結(jié)束時(shí),如果沒(méi)有任何非守護(hù)線程在運(yùn)行,守護(hù)線程就會(huì)自盡了。
import java.io.IOException; class TestMain4 extends Thread { public static void main(String [] args){ |
關(guān)于java及python中如何守護(hù)線程Daemon就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
新聞標(biāo)題:java及python中如何守護(hù)線程Daemon
文章鏈接:http://www.chinadenli.net/article42/ieochc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、App開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、服務(wù)器托管、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)