Daemonthread(守护线程)的含义

http://fruitking.iteye.com/blog/419951

 

先来一个不是守护线程的例子:
public class Thread1 implements Runnable {

public void run() {
for (;;) {
try{
Thread.sleep(500);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("Thread   1   run");
}
}

public static void main(String[] args) {
System.out.println("Thread   main   started!");
try {
(new Thread(new Thread1())).start();
} catch (Exception e) {
}
System.out.println("Thread   main   ended!");
}

}
这样主线程结束了,但是启动线程Thread1这个实例还没有结束,将一直运行下去
来看一个守护线程的例子:
public class ThreadDaemon implements Runnable {

public void run() {
for (;;) {
System.out.println("Thread   1   run");
}
}

public static void main(String[] args) {
System.out.println("Thread   main   started!");
try {
Thread a = new Thread(new ThreadDaemon());
a.setDaemon(true);
a.start();
} catch (Exception e) {
}
System.out.println("Thread   main   ended!");
}

}
运行结果如下:
Thread   main   started!
Thread   main   ended!
Thread   1   run
Thread   1   run
Thread   1   run
Thread   1   run
Thread   1   run
后面就停止没有了输出了
说明那个子线程ThreadDaemon也结束了
这就是守护线程的含义:只要主线程退出了,不管守护线程死活都强制退出

 

应用场景:

管理作用,后台管理者
比如:
进行内存回收,垃圾清理等工作




无论是什么线程,都一定会分时间片执行的,和上面的检测拼写及输入并没有任何关系

 

比如你正在   用   Java   写成的编辑器   写   Word   文档,

你一边敲键盘,这是个   非守护线程,   后台还有一个   拼写检查   线程,它是个守护线程,他尽量不打扰你写稿子,   你们可以同时进行,他发现有拼写错误时在状态条显示错误,但是你可以忽略。

就像   城堡门前有个卫兵   (守护线程),里面有诸侯(非守护线程),他们是可以同时干着各自的活儿,但是   城堡里面的人都搬走了,   那么卫兵也就没有存在的意义了。

 

守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)


所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值