Java后臺(tái)線程操作示例【守護(hù)線程】
本文實(shí)例講述了Java后臺(tái)線程操作。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
有一種線程,它是后面運(yùn)行的,它的任務(wù)是為其他線程提供服務(wù),這種線程被稱(chēng)為“后臺(tái)”線程,又稱(chēng)為“守護(hù)線程”或“精靈線程”。JVM的垃圾回收線程就是典型的后臺(tái)線程。
后臺(tái)線程有個(gè)特征:如果所有的前臺(tái)線程都死亡,后臺(tái)線程會(huì)自動(dòng)死亡,
調(diào)用Thread對(duì)象的setDaemon(true)方法可將指定線程設(shè)置成后臺(tái)線程,所有的前臺(tái)線程都死亡時(shí),后臺(tái)線程隨之死亡。當(dāng)整個(gè)虛擬機(jī)中只剩下后臺(tái)線程時(shí),程序就沒(méi)有繼續(xù)運(yùn)行的必要了,虛擬機(jī)也就退出了。
二 代碼
public class DaemonThread extends Thread
{
// 定義后臺(tái)線程的線程執(zhí)行體與普通線程沒(méi)有任何區(qū)別
public void run()
{
for (int i = 0; i < 1000 ; i++ )
{
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args)
{
DaemonThread t = new DaemonThread();
// 將此線程設(shè)置成后臺(tái)線程
t.setDaemon(true);
// 啟動(dòng)后臺(tái)線程
t.start();
for (int i = 0 ; i < 10 ; i++ )
{
System.out.println(Thread.currentThread().getName()
+ " " + i);
}
// -----程序執(zhí)行到此處,前臺(tái)線程(main線程)結(jié)束------
// 后臺(tái)線程也應(yīng)該隨之結(jié)束
}
}
三 運(yùn)行
main 0
Thread-0 0
main 1
Thread-0 1
main 2
Thread-0 2
main 3
Thread-0 3
main 4
Thread-0 4
main 5
Thread-0 5
main 6
Thread-0 6
main 7
Thread-0 7
main 8
Thread-0 8
main 9
Thread-0 9
Thread-0 10
Thread-0 11
Thread-0 12
Thread-0 13
Thread-0 14
Thread-0 15
Thread-0 16
Thread-0 17
Thread-0 18
四 說(shuō)明
上面程序中先將t線程設(shè)置成后臺(tái)線程,然后啟動(dòng)該線程,本來(lái)該線程應(yīng)該執(zhí)行到i等于999才會(huì)結(jié)束,但從結(jié)果不難發(fā)現(xiàn),該后臺(tái)線程無(wú)法運(yùn)行到999,因?yàn)楫?dāng)主線程也就是程序唯一的前臺(tái)線程運(yùn)行結(jié)束后,JVM會(huì)主動(dòng)退出,因而后臺(tái)線程也就被結(jié)束了。
主線程默認(rèn)是前臺(tái)線程,t線程默認(rèn)也是前臺(tái)線程。并不是所有的線程默認(rèn)都是前臺(tái)線程,有些線程默認(rèn)就是后臺(tái)線程——前臺(tái)線程創(chuàng)建的子線程默認(rèn)是前臺(tái)線程,后臺(tái)線程創(chuàng)建的子線程默認(rèn)是后臺(tái)線程。
setDaemon(true)必須在start()方法之前調(diào)用,否則會(huì)引發(fā)異常。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java進(jìn)程與線程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
java面向?qū)ο笤O(shè)計(jì)原則之合成復(fù)用原則示例詳解
這篇文章主要介紹了java面向?qū)ο笤O(shè)計(jì)原則之合成復(fù)用原則的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10
Java中替代equals,compareTo和toString的方法
這篇文章主要介紹了Java中替代equals,compareTo和toString的方法,文中代碼十分詳細(xì),幫助大家更好的理解的學(xué)習(xí),感興趣的朋友可以了解下2020-06-06
springBoot整合shiro如何解決讀取不到@value值問(wèn)題
這篇文章主要介紹了springBoot整合shiro如何解決讀取不到@value值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-08-08
java調(diào)用process線程阻塞問(wèn)題的解決
這篇文章主要介紹了java調(diào)用process線程阻塞問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java使用代理進(jìn)行網(wǎng)絡(luò)連接方法示例
這篇文章主要介紹了Java使用代理進(jìn)行網(wǎng)絡(luò)連接方法示例,內(nèi)容十分詳細(xì),需要的朋友可以參考下。2017-09-09
一文詳解SpringBoot中CommandLineRunner接口
Spring Boot的CommandLineRunner接口是一個(gè)函數(shù)式接口,用于在Spring Boot應(yīng)用程序啟動(dòng)后執(zhí)行一些初始化操作,它提供了一個(gè)run方法,該方法在應(yīng)用程序啟動(dòng)后被調(diào)用,本文給大家詳細(xì)介紹了SpringBoot中CommandLineRunner接口,需要的朋友可以參考下2023-10-10
基于list stream: reduce的使用實(shí)例
這篇文章主要介紹了list stream: reduce的使用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

