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

转载请保留原文出处、译者和译文链接。]

posted on 2014-05-10 15:40  TonySpark  阅读(1865)  评论(5编辑  收藏  举报

导航