Java中線程分為兩種類型:用戶線程和守護(服務)線程。通過Thread.setDaemon(false)設置為用戶線程;通過Thread.setDaemon(true)設置為守護線程;不設置則默認為用戶線程。
結束單線程用Thread.interrupt() 方法,多線程結束則需要設置守護線程。當不存在用戶線程時,守護線程就會全部終結(可以理解為:守護線程是服務線程,用戶線程是被服務線程,用戶線程(被服務線程)全都沒有了,服務線程便沒有存在意義而自動終結)
例子:
class StopThread implements Runnable {public void run() {// 構造函數,實例化時默認執行while (true) {// 永真循環,用於檢測該守護線程會不會自動結束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);// 創建新線程Thread t2 = new Thread(st);t1.setDaemon(true);// 設置成守護(服務)線程,當用戶線程全掛時,所有守護線程也跟著掛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");}}當執行完最後一句System.out.println(“over”) 時,用戶線程(主程序)結束;在後台永真循環裡不斷輸出信息的兩個守護線程也會自動終止。
另外介紹一個常見的問題:Java裡面所有非守護線程結束後,所有的守護線程自動退出這句話對嗎?
參考答案:
守護線程的唯一作用是為其他線程提供服務.當只剩下守護線程時,虛擬機就退出了”(出自:java核心技術),現在非守護的沒有了,也就不需要守護來提供服務了。
總結
以上就是本文關於Java語言多線程終止中的守護線程實例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!