Java之守護執行緒

鄭清發表於2018-08-28

前臺執行緒、守護執行緒 :   前臺執行緒 都結束之後 ==》 守護執行緒會自動結束
 
建立一個執行緒物件,預設與建立環境一致 (ex:主執行緒是前臺執行緒,那麼在主執行緒建立的執行緒物件預設是前臺執行緒)
  
void setDaemon(boolean on) : 將該執行緒標記為守護執行緒或使用者執行緒。 
注意:①setDaemon不能在start之後呼叫!!
           ②主執行緒的狀態不能改
           ③啟動之後,執行緒的狀態不能改
           ④執行緒的狀態與建立該執行緒的環境狀態是一致的

ex:

public class Demo {
	public static void main(String[] args) {
		A a = new A();
		Thread threadA = new Thread(a);
		threadA.setName("AAA ");
		B b = new B();
		Thread threadB = new Thread(b);
		threadB.setName("BBB ");
		
		//啟動執行緒
		threadA.start();
		threadB.setDaemon(true);//把threadB執行緒設定為後臺執行緒
		threadB.start();

	}
}
/*
 * 測試思路:設計兩個執行緒類,一個充當前臺執行緒,輸出10次
 * 					             一個充當守護執行緒,輸出無限次
 * 期望效果:當前臺執行緒輸出結束,後臺會自動結束
 */
class A implements Runnable{
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName()+" : 這是執行緒  AAA...");
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("執行緒A 結束 ...........");
	}
}

class B implements Runnable{
	@Override
	public void run() {
		while(true){
			System.out.println(Thread.currentThread().getName()+" : 這是執行緒 BBB...");
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

執行結果圖:(threadB執行緒的死迴圈輸出會停止)

相關文章