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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史龙贤 黑马帝   /  2012-9-27 00:53  /  1649 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看到一个守护线程,但是不太明白是神马意思?到底是什么守护法?是在什么情况下使用的?到底如何使用的?可以举个例子说明一下吗?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
所谓的守护线程也叫后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。
因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程。
反过来说,只要有任何非后台线程(用户线程)还在运行,程序就不会终止。后台线程在不执行finally子句的情况下就会终止其run方法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
setDaemon方法必须在线程启动前调用,标记该线程为守护线程,当正在运行的线程都为守护线程时,也就是前台线程结束后,Java虚拟机退出。
也就是说守护线程有两种结束方式,一种是自己执行结束,一种是随着虽有的前台程序结束而结束。
应用最简单的就是jvm的垃圾回收机制,他是随着你的程序运行而运行,当你的程序结束,他也就结束。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王得新 于 2012-9-27 08:55 编辑

守护线程与普通线程的区别在于,在调用start()前,调用线程对象(这里的对象是t2)的方法setDaemon(true)。
当开始守护线程的主线程退出时,守护线程自动退出。有很多的运用,比如JVM的垃圾回收、内存管理等线程都是主线程的守护线程。

从结果可以看出  "守护线程第" + i + "次执行!"  并没有执行50次(这时因为   “当开始守护线程的主线程退出时,守护线程自动退出”)。

public class ThreadDemo{

    /**
     * @param args
     */
    public static void main(String[] args) {
        Thread t1 = new CommonThread();
        Thread t2 = new Thread(new DaemonThread());
        t2.setDaemon(true); //设置为守护线程

        t2.start();
        t1.start();
    }

}
................................................................................................
public class CommonThread extends Thread {
    public void run() {
      
        for (int i = 0; i < 10; i++) {
            System.out.println("普通线程1第" + i + "次执行!");
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
...................................................................................................
public class DaemonThread implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println("守护线程第" + i + "次执行!");
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马