Java 守护线程(Daemon) 示例
本文由 TonySpark 翻译自 Javarevisited。转载请参见文章末尾的要求。
当我们在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
[ 转载请保留原文出处、译者和译文链接。]
时间: 2024-10-03 21:41:15