java多線程總結二:后台線程(守護線程)


所謂的后台線程,是指在程序運行的時候在后台提供一種通用服務的線程,並且這種線程並不屬於程序中不可或缺的部分。因此當所有的非后台線程結束時,程序也就終止了,同時會殺死所有后台線程。反過來說,只要有任何非后台線程(用戶線程)還在運行,程序就不會終止。后台線程在不執行finally子句的情況下就會終止其run方法后台線程創建的子線程也是后台線程。

下面是一個后台線程的示例:

[java]   view plain copy
  1. <span style="font-size:16px;">package demo.thread;  
  2.   
  3. import java.util.concurrent.TimeUnit;  
  4.   
  5. public class DaemonDemo implements Runnable {  
  6.     @Override  
  7.     public void run() {  
  8.         try {  
  9.             while (true) {  
  10.                 Thread.sleep(1000);  
  11.                 System.out.println("#" + Thread.currentThread().getName());  
  12.             }  
  13.         } catch (InterruptedException e) {  
  14.             e.printStackTrace();  
  15.         } finally {// 后台線程不執行finally子句  
  16.             System.out.println("finally ");  
  17.         }  
  18.     }  
  19.   
  20.     public static void main(String[] args) {  
  21.         for (int i = 0; i < 10; i++) {  
  22.             Thread daemon = new Thread(new DaemonDemo());  
  23.             // 必須在start之前設置為后台線程  
  24.             daemon.setDaemon(true);  
  25.             daemon.start();  
  26.         }  
  27.         System.out.println("All daemons started");  
  28.         try {  
  29.             TimeUnit.MILLISECONDS.sleep(1000);  
  30.         } catch (InterruptedException e) {  
  31.             // TODO Auto-generated catch block  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35. }  
  36. </span>  


 

運行結果:

All daemons started
#Thread-2
#Thread-3
#Thread-1
#Thread-0
#Thread-9
#Thread-6
#Thread-8
#Thread-5
#Thread-7
#Thread-4

分析:從結果可以看出,十個子線程並沒有無線循環的打印,而是在主線程(main())退出后,JVM強制關閉所有后台線程。而不會有任何希望出現的確認形式,如finally子句不執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM