Java 守護線程(Daemon) 例子


      當我們在Java中創建一個線程,缺省狀態下它是一個User線程,如果該線程運行,JVM不會終結該程序。當一個線被標記為守護線程,JVM不會等待其結束,只要所有用戶(User)線程都結束,JVM將終結程序及相關聯的守護線程。

     Java中可以用 Thread.setDaemon(true) 來創建一個守護線程。咱們看一個Java中有關守護線程的例子。

      

 1 public class JavaDaemonThread {
 2  
 3     public static void main(String[] args) throws InterruptedException {
 4         Thread dt = new Thread(new DaemonThread(), "dt");
 5         dt.setDaemon(true);//譯者注:此次將User線程變為Daemon線程
 6         dt.start();
 7         //continue program
 8         Thread.sleep(30000);
 9         System.out.println("Finishing program");
10     }
11  
12 }
13  
14 class DaemonThread implements Runnable{//譯者注:此類雖類名是為Daemon線程,其實為User線程
15  
16     @Override
17     public void run() {
18         while(true){
19             processSomething();
20         }
21     }
22  
23     private void processSomething() {
24         try {
25             System.out.println("Processing daemon thread");
26             Thread.sleep(5000);
27         } catch (InterruptedException e) {
28             e.printStackTrace();
29         }
30     }
31      
32 }

 

      當你運行該程序,JVM main()方法中先創建一個用戶線程,再創建一個守護線程。當main()方法結束后,程序終結,同時JVM也關閉守護線程。

      下面就是上述程序執行的結果:

 

1 Processing daemon thread
2 Processing daemon thread
3 Processing daemon thread
4 Processing daemon thread
5 Processing daemon thread
6 Processing daemon thread
7 Finishing program

       如果我們不將一個線程以守護線程方式來運行,即使主線程已經執行完畢,程序也永遠不會結束,可以嘗試把上述將線程設為守護線程的那句注釋掉,重新運行看看結果:

       通常我們創建一個守護線程,對於一個系統來說在功能上不是主要的。例如抓取系統資源明細和運行狀態的日志線程或者監控線程。

 

原文鏈接: Javarevisited 翻譯: TonySpark
譯文鏈接: http://www.cnblogs.com/tonyspark/p/3720640.html

轉載請保留原文出處、譯者和譯文鏈接。]


免責聲明!

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



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