java多執行緒_守護執行緒和非守護執行緒
阿新 • • 發佈:2019-02-13
基本概念
- 守護執行緒:和主執行緒一起結束的執行緒,叫守護執行緒。
- 非守護執行緒:主執行緒的結束不影響執行緒的執行的執行緒,也叫使用者執行緒。
如何將一個執行緒t變成守護執行緒
呼叫t.setDaemon(true)方法將非守護執行緒變為守護執行緒。;
示例程式碼
- 非守護執行緒:
Thread t = new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
for(int i=1 ; i<=10 ; i++){
try {
Thread.sleep(500);//執行緒休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子執行緒執行"+i+"次");
}
}
}) ;
t.start();
for (int i=1 ; i<=5 ; i++){
System.out.println("主執行緒執行"+i+"次");
}
}
執行結果:
主執行緒執行1次
主執行緒執行2次
主執行緒執行3次
主執行緒執行4次
主執行緒執行5次
子執行緒執行1次
子執行緒執行2次
子執行緒執行3次
子執行緒執行4次
子執行緒執行5次
子執行緒執行6次
子執行緒執行7次
子執行緒執行8次
子執行緒執行9次
子執行緒執行10次
由結果可以看出主執行緒的正常結束並不會影響子執行緒t的執行,子執行緒t繼續執行。
- 守護執行緒
Thread t = new Thread(new Runnable() {
public void run() {
// TODO Auto-generated method stub
for(int i=1 ; i<=10 ; i++){
try {
Thread.sleep(30);//執行緒休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子執行緒執行"+i+"次");
}
}
}) ;
t.setDaemon(true) ; //將子執行緒t設定為守護執行緒
t.start();
for(int i=1 ; i<=5 ; i++){
try {
Thread.sleep(30);//執行緒休眠500毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主執行緒執行"+i+"次");
}
}
執行結果:
主執行緒執行1次
子執行緒執行1次
主執行緒執行2次
子執行緒執行2次
主執行緒執行3次
子執行緒執行3次
主執行緒執行4次
子執行緒執行4次
主執行緒執行5次
由結果可以看出主執行緒結束後,設定為守護執行緒的子執行緒將不再執行。