歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java多線程總結二:後台線程(守護線程)

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

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

  1. 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. }  

運行結果:

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子句不執行。

Copyright © Linux教程網 All Rights Reserved