Java語(yǔ)言多線程終止中的守護(hù)線程實(shí)例
Java中線程分為兩種類型:用戶線程和守護(hù)(服務(wù))線程。通過(guò)Thread.setDaemon(false)設(shè)置為用戶線程;通過(guò)Thread.setDaemon(true)設(shè)置為守護(hù)線程;不設(shè)置則默認(rèn)為用戶線程。
結(jié)束單線程用 Thread.interrupt() 方法,多線程結(jié)束則需要設(shè)置守護(hù)線程。當(dāng)不存在用戶線程時(shí),守護(hù)線程就會(huì)全部終結(jié)(可以理解為:守護(hù)線程是服務(wù)線程,用戶線程是被服務(wù)線程,用戶線程(被服務(wù)線程)全都沒(méi)有了,服務(wù)線程便沒(méi)有存在意義而自動(dòng)終結(jié))
例子:
class StopThread implements Runnable {
public void run() {
// 構(gòu)造函數(shù),實(shí)例化時(shí)默認(rèn)執(zhí)行
while (true) {
// 永真循環(huán),用于檢測(cè)該守護(hù)線程會(huì)不會(huì)自動(dòng)結(jié)束
System.out.println(Thread.currentThread().getName() + "....run");
}
}
}
public class threadTest {
public static void main(String[] args) {
StopThread st = new StopThread();
Thread t1 = new Thread(st);
// 創(chuàng)建新線程
Thread t2 = new Thread(st);
t1.setDaemon(true);
// 設(shè)置成守護(hù)(服務(wù))線程,當(dāng)用戶線程全掛時(shí),所有守護(hù)線程也跟著掛
t2.setDaemon(true);
t1.start();
// 線程開(kāi)始
t2.start();
int num = 0;
while (true) {
if (num++ == 10) {
break;
}
System.out.println(Thread.currentThread().getName() + "......." + num);
}
System.out.println("over");
}
}
當(dāng)執(zhí)行完最后一句 System.out.println(“over”) 時(shí),用戶線程(主程序)結(jié)束;在后臺(tái)永真循環(huán)里 不斷輸出信息的兩個(gè)守護(hù)線程 也會(huì)自動(dòng)終止。
另外介紹一個(gè)常見(jiàn)的問(wèn)題:Java里面 所有非守護(hù)線程結(jié)束后,所有的守護(hù)線程自動(dòng)退出這句話對(duì)嗎?
參考答案:
守護(hù)線程的唯一作用是為其他線程提供服務(wù).當(dāng)只剩下守護(hù)線程時(shí),虛擬機(jī)就退出了”(出自:java核心技術(shù)),現(xiàn)在非守護(hù)的沒(méi)有了,也就不需要守護(hù)來(lái)提供服務(wù)了。
總結(jié)
以上就是本文關(guān)于Java語(yǔ)言多線程終止中的守護(hù)線程實(shí)例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Java并發(fā)容器之ConcurrentLinkedQueue詳解
這篇文章主要介紹了Java并發(fā)容器之ConcurrentLinkedQueue詳解,加鎖隊(duì)列的實(shí)現(xiàn)較為簡(jiǎn)單,這里就略過(guò),我們來(lái)重點(diǎn)來(lái)解讀一下非阻塞隊(duì)列,2023-12-12
從點(diǎn)到面, 下面我們來(lái)看下非阻塞隊(duì)列經(jīng)典實(shí)現(xiàn)類ConcurrentLinkedQueue,需要的朋友可以參考下
java 非對(duì)稱加密算法DH實(shí)現(xiàn)詳解
這篇文章主要介紹了java 非對(duì)稱加密算法DH實(shí)現(xiàn)詳解 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
淺談@Value和@Bean的執(zhí)行順序問(wèn)題
這篇文章主要介紹了@Value和@Bean的執(zhí)行順序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷回滾功能
本文介紹了如何在Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷回滾功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
淺談Servlet的Cookie和Session機(jī)制
雖然session機(jī)制在web應(yīng)用程序中被采用已經(jīng)很長(zhǎng)時(shí)間了,但是仍然有很多人不清楚session機(jī)制的本質(zhì),以至不能正確的應(yīng)用這一技術(shù).本文將詳細(xì)討論session以及cookie的工作機(jī)制,需要的朋友可以參考下2021-05-05
Spring Boot實(shí)現(xiàn)動(dòng)態(tài)更新任務(wù)的方法
這篇文章主要介紹了Spring Boot實(shí)現(xiàn)動(dòng)態(tài)更新任務(wù)的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家學(xué)習(xí)使用Spring Boot動(dòng)態(tài)更新任務(wù)具有一定的參考價(jià)值,需要的朋友們來(lái)一起看看吧。2017-04-04
Springboot錯(cuò)誤頁(yè)面和錯(cuò)誤信息定制操作
這篇文章主要介紹了Springboot錯(cuò)誤頁(yè)面和錯(cuò)誤信息定制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法
本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過(guò)Java程序獲取IP地址對(duì)應(yīng)的城市,需要借助第三方的IP地址庫(kù),下面就來(lái)介紹一下,感興趣的可以了解一下2023-10-10

