什么是守护线程?

什么是守护线程?

  •   守护线程的唯一用途 是为其他线程提供服务。计时线程就是一个例子,它定时地发送“ 计时器嘀嗒” 信号给其他 线程或清空过时的高速缓存项的线程。当只剩下守护线程时, 虚拟机就退出了,由于如果只 剩下守护线程, 就没必要继续运行程序了。 
  •   守护线程有时会被初学者错误地使用, 他们不打算考虑关机(shutdown) 动作。但是, 这是很危险的。守护线程应该永远不去访问固有资源, 如文件、 数据库,因为它会在任何时 候甚至在一个操作的中间发生中断。
  •   在Java语言中,守护线程一般具有较低的优先级,它并非只由JVM内部提供,用户在编写程序时也可以自己设置守护线程,例如将一个用户线程设置为守护线程的方法就是在调用start()方法启动线程之前调用对象的setDaemon(true)方法,若将以上括号里的参数设置为false,则表示的是用户进程模式。   
  •   需要注意的是,当在一个守护线程中产生了其它线程,那么这些新产生的线程默认还是守护线程,用户线程也是如此。

测试代码

package com.javaBase.LineDistance;

/**
 * 〈一句话功能简述〉;
 * 〈多线程测试代码〉
 *
 * @author jxx()
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class testLine {

    public static void main(String[] args){
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                System.err.println("t 线程执行完毕。");
            }
        });
        Thread guardT = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true) {
                    System.out.println("守护线程正在执行...");
                }
            }
        });
        guardT.setDaemon(true);
        guardT.start();
        t.start();
    }
}

运行结果:

D:\jdk1.7\bin\java "-javaagent:D:\JetBrains\IntelliJ IDEA 2017.1.3\lib\idea_rt.jar=57757:D:\JetBrains\IntelliJ IDEA 2017.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\jdk1.7\jre\lib\charsets.jar;D:\jdk1.7\jre\lib\deploy.jar;D:\jdk1.7\jre\lib\ext\access-bridge-64.jar;D:\jdk1.7\jre\lib\ext\dnsns.jar;D:\jdk1.7\jre\lib\ext\jaccess.jar;D:\jdk1.7\jre\lib\ext\localedata.jar;D:\jdk1.7\jre\lib\ext\servlet-api.jar;D:\jdk1.7\jre\lib\ext\sunec.jar;D:\jdk1.7\jre\lib\ext\sunjce_provider.jar;D:\jdk1.7\jre\lib\ext\sunmscapi.jar;D:\jdk1.7\jre\lib\ext\zipfs.jar;D:\jdk1.7\jre\lib\javaws.jar;D:\jdk1.7\jre\lib\jce.jar;D:\jdk1.7\jre\lib\jfr.jar;D:\jdk1.7\jre\lib\jfxrt.jar;D:\jdk1.7\jre\lib\jsse.jar;D:\jdk1.7\jre\lib\management-agent.jar;D:\jdk1.7\jre\lib\plugin.jar;D:\jdk1.7\jre\lib\resources.jar;D:\jdk1.7\jre\lib\rt.jar;E:\jxxProject\out\production\jxxProject;E:\repository\net\sf\json-lib;E:\repository\net\sf\json-lib\json-lib\2.4\json-lib-2.4.jar;E:\repository\com\alibaba\fastjson\1.1.46.sec01\fastjson-1.1.46.sec01.jar com.javaBase.LineDistance.testLine
t 线程执行完毕。
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...
守护线程正在执行...

Process finished with exit code 0

可见,当程序非守护线程都执行完毕后,守护线程也会直接退出。

  

posted @ 2019-10-10 10:06  莫等、闲  阅读(2260)  评论(0编辑  收藏  举报