黑马程序员技术交流社区

标题: 守护线程的问题 [打印本页]

作者: 罗家辉    时间: 2013-4-11 16:24
标题: 守护线程的问题
本帖最后由 罗家辉 于 2013-4-11 21:23 编辑
  1. public class ThreadMethod {
  2.         public static void main(String[] args){
  3.                 Thread t = new Thread(new DaemonThread());
  4.                 t.setDaemon(true);//设成守护线程(后台线程)
  5.                 t.start();
  6.                 for(int i=0; i<10; i++){
  7.                         System.out.println(Thread.currentThread().getName()+"-----"+i);
  8.                 }
  9.         }
  10. }
  11. class DaemonThread implements Runnable{
  12.         public void run() {
  13.                 for(int i=0; i<1000; i++){
  14.                         System.out.println(Thread.currentThread().getName()+"****"+i);
  15.                 }
  16.         }
  17.         
  18. }
复制代码
本应该程序要运行到i=999才结束,当是当设成守护线程(后台线程),主线程运行完成个程序就结束,为什么会这样,我们什么时候才用到守护程序,书上说jvm的垃圾回收器就是一个守护线程?想知道什么时候用守护线程,以及它的特点
作者: 梁航斌    时间: 2013-4-11 16:36
本帖最后由 梁航斌 于 2013-4-11 16:40 编辑

就是后台运行的,与程序同生共死,当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。没有运行到999就是因为java虚拟机中,主线程结束了,并且没有其他线程,只有守护线程。所以程序退出。
作者: 我手心里的宝    时间: 2013-4-11 16:46
守护线程就是跟主线程同生共死
如果主线程结束了,那么不管守护线程有没有运行完,都会结束
作者: 庄生晓梦    时间: 2013-4-11 17:06
守护线程的特点是:当正在运行的线程都是守护线程时,java虚拟机退出;
该方法必须在启动线程前调用。
这里主程序运行完后,只剩下一个守护线程,所以会结束运行。
作者: 秦久启    时间: 2013-4-11 17:09
后台线程也可以叫做守护线程或用户线程。该方法必须在启动线程前调用。


守护线程的特点是开启后和前台线程共同抢夺cpu执行权运行,开启和运行都是没有区别的,就是结束有区别,当所有的前台线程都结束后,后台线程就会自动结束。

作者: 蓝色骨头    时间: 2013-4-11 17:44
守护线程就是在程序执行的时候在后台提供服务的线程,这种线程不属于程序中不可或缺的部分,当程序中所有非后台线程都终止时程序就终止了,同时杀死所有后台线程。在线程启动前调用setDaemon方法将线程设置为后台线程。


作者: 罗家辉    时间: 2013-4-11 17:45
秦久启 发表于 2013-4-11 17:09
后台线程也可以叫做守护线程或用户线程。该方法必须在启动线程前调用。

那我们什么时候会用到?
作者: 黄玉昆    时间: 2013-4-11 19:44
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2