Java線程之守護線程(Daemon)用法實例。本站提示廣大學習愛好者:(Java線程之守護線程(Daemon)用法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java線程之守護線程(Daemon)用法實例正文
本文實例講述了Java線程之守護線程(Daemon)用法。分享給年夜家供年夜家參考。詳細以下:
守護線程(Daemon)
Java有兩種Thread:“守護線程Daemon”與“用戶線程User”。
我們之前看到的例子都是用戶,守護線程是一種“在後台供給通用性支撐”的線程,它其實不屬於法式本體。
從字面上我們很輕易將守護線程懂得成是由虛擬機(virtual machine)在外部創立的,而用戶線程則是本身所創立的。現實其實不是如許,任何線程都可所以“守護線程Daemon”或“用戶線程User”。他們在簡直每一個方面都是雷同的,獨一的差別是斷定虛擬機什麼時候分開:
用戶線程:Java虛擬機在它一切非守護線程曾經分開後主動分開。
守護線程:守護線程則是用來辦事用戶線程的,假如沒有其他用戶線程在運轉,那末就沒有可辦事對象,也就沒有來由持續下去。
setDaemon(boolean on)辦法可以便利的設置線程的Daemon形式,true為Daemon形式,false為User形式。setDaemon(boolean on)辦法必需在線程啟動之前挪用,當線程正在運轉時挪用會發生異常。isDaemon辦法將測試該線程能否為守護線程。值得一提的是,當你在一個守護線程中發生了其他線程,那末這些新發生的線程不消設置Daemon屬性,都將是守護線程,用戶線程異樣。
例:我們所熟習的Java渣滓收受接管線程就是一個典范的守護線程,當我們的法式中不再有任何運轉中的Thread,法式就不會再發生渣滓,渣滓收受接管器也就無事可做,所以當渣滓收受接管線程是Java虛擬機上僅剩的線程時,Java虛擬機遇主動分開。
import java.io.IOException; /** * 守護線程在沒有效戶線程可辦事時主動分開 */ public class TestMain4 extends Thread { public TestMain4() { } /** * 線程的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){ TestMain4 test = new TestMain4(); test.setDaemon(true); test.start(); System.out.println("isDaemon = " + test.isDaemon()); try { System.in.read(); // 接收輸出,使法式在此停留,一旦吸收到用戶輸出,main線程停止,守護線程主動停止 } catch (IOException ex) { ex.printStackTrace(); } } }
願望本文所述對年夜家的java法式設計有所贊助。