java執行緒之守護執行緒和使用者執行緒

BUG工廠?發表於2019-01-19

/**
* <p>Title: Demo3.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>

* <p>Company: www.baidudu.com</p>
* @author shenlan
* @date 2019年1月19日
* @version 1.0
*/
package test;

import java.util.concurrent.TimeUnit;

/**
* @Title: Demo3.java
* @Description:模擬:建立主執行緒(使用者執行緒)中建立一個子執行緒為守護執行緒,執行main方法(使用者執行緒)
* –斷點測試..執行main方法,啟動主執行緒(不結束main(使用者執行緒))
* ==輸出..執行一次主執行緒,由於main方法(使用者執行緒)未結束,守護執行緒每秒輸出一次(守護執行緒守護的是使用者執行緒)
* –正常模式..
* ==輸出..主執行緒執行一次,守護執行緒執行一次,只有由於使用者執行緒結束,JVM退出,守護執行緒結束
* //將(子執行緒)守護執行緒改為使用者執行緒時,主執行緒結束,主執行緒中的子執行緒一直執行(每秒執行一次)
*
* 注意 :不是說當前子執行緒是守護執行緒,主執行緒結束,子執行緒就跟著結束,前提條件是:當JVM應用例項中沒有應用執行緒繼續執行,如果有其他使用者執行緒繼續執行,那麼後臺執行緒不會中斷.
* @Copyright: **科技 (c) 2018
* @Company: **科技
* @author **
* @date 2019年1月19日
* @version 1.0
*/
public class Demo3 {

public static void main(String[] args) {

Thread mainThread = new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
Thread childrenThread = new Thread(new ChildrenThread());
childrenThread.setDaemon(true);
// –守護執行緒必須在啟動執行緒之前操作
childrenThread.start();
System.out.println(“I`m main thread.”);

}
});

mainThread.start();

}

}

class ChildrenThread implements Runnable{

@Override
public void run() {

while (true) {
System.out.println(“I`m children thread.”);

try {
TimeUnit.MILLISECONDS.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

}

相關文章