1. 程式人生 > >java多執行緒_守護執行緒和非守護執行緒

java多執行緒_守護執行緒和非守護執行緒

基本概念

  • 守護執行緒:和主執行緒一起結束的執行緒,叫守護執行緒。
  • 非守護執行緒:主執行緒的結束不影響執行緒的執行的執行緒,也叫使用者執行緒。

如何將一個執行緒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次

由結果可以看出主執行緒結束後,設定為守護執行緒的子執行緒將不再執行。