溫馨提示×

溫馨提示×

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

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

Java語言多線程終止中的守護(hù)線程實例

發(fā)布時間:2020-09-01 00:16:59 來源:腳本之家 閱讀:172 作者:chance_66 欄目:編程語言

Java中線程分為兩種類型:用戶線程和守護(hù)(服務(wù))線程。通過Thread.setDaemon(false)設(shè)置為用戶線程;通過Thread.setDaemon(true)設(shè)置為守護(hù)線程;不設(shè)置則默認(rèn)為用戶線程。

結(jié)束單線程用 Thread.interrupt() 方法,多線程結(jié)束則需要設(shè)置守護(hù)線程。當(dāng)不存在用戶線程時,守護(hù)線程就會全部終結(jié)(可以理解為:守護(hù)線程是服務(wù)線程,用戶線程是被服務(wù)線程,用戶線程(被服務(wù)線程)全都沒有了,服務(wù)線程便沒有存在意義而自動終結(jié))

例子:

class StopThread implements Runnable {
	public void run() {
		// 構(gòu)造函數(shù),實例化時默認(rèn)執(zhí)行
		while (true) {
			// 永真循環(huán),用于檢測該守護(hù)線程會不會自動結(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)用戶線程全掛時,所有守護(hù)線程也跟著掛
		t2.setDaemon(true);
		t1.start();
		// 線程開始
		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”) 時,用戶線程(主程序)結(jié)束;在后臺永真循環(huán)里 不斷輸出信息的兩個守護(hù)線程 也會自動終止。

另外介紹一個常見的問題:Java里面 所有非守護(hù)線程結(jié)束后,所有的守護(hù)線程自動退出這句話對嗎?

參考答案:

守護(hù)線程的唯一作用是為其他線程提供服務(wù).當(dāng)只剩下守護(hù)線程時,虛擬機(jī)就退出了”(出自:java核心技術(shù)),現(xiàn)在非守護(hù)的沒有了,也就不需要守護(hù)來提供服務(wù)了。

總結(jié)

以上就是本文關(guān)于Java語言多線程終止中的守護(hù)線程實例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI