A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗家辉 中级黑马   /  2013-4-11 16:24  /  1557 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗家辉 于 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的垃圾回收器就是一个守护线程?想知道什么时候用守护线程,以及它的特点

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

7 个回复

倒序浏览
本帖最后由 梁航斌 于 2013-4-11 16:40 编辑

就是后台运行的,与程序同生共死,当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。没有运行到999就是因为java虚拟机中,主线程结束了,并且没有其他线程,只有守护线程。所以程序退出。
回复 使用道具 举报
守护线程就是跟主线程同生共死
如果主线程结束了,那么不管守护线程有没有运行完,都会结束
回复 使用道具 举报
守护线程的特点是:当正在运行的线程都是守护线程时,java虚拟机退出;
该方法必须在启动线程前调用。
这里主程序运行完后,只剩下一个守护线程,所以会结束运行。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
后台线程也可以叫做守护线程或用户线程。该方法必须在启动线程前调用。


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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
守护线程就是在程序执行的时候在后台提供服务的线程,这种线程不属于程序中不可或缺的部分,当程序中所有非后台线程都终止时程序就终止了,同时杀死所有后台线程。在线程启动前调用setDaemon方法将线程设置为后台线程。

回复 使用道具 举报
秦久启 发表于 2013-4-11 17:09
后台线程也可以叫做守护线程或用户线程。该方法必须在启动线程前调用。

那我们什么时候会用到?
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-11 19:44:06
8#
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马