守护线程(Daemon)

守护线程是程序运行时,后台提供的一种通用服务的线程。

Java线程分为两种:用户线程(非守护线程)、守护线程

用户线程和守护线程本质上没什么区别,唯一的区别在于JVM的退出,如果用户线程全部退出运行。不管是否存在守护线程,JVM都会退出,因为即使存在守护线程,他也没有可守护的用户线程了。垃圾回收线程是典型的守护线程,当JVM开始运行的时候,垃圾回收线程就一直在后台默默守护,对JVM执行过程中产生的垃圾进行回收,当没有任何运行的用户线程时,垃圾回收线程也没有可回收的垃圾了,这时JVM也退出了。

代码测试示例:

package cn.com.demo;

/**
 * @Author: Peacock__
 * @Date: 2019/4/22 10:44
 */
public class DemoThread extends Thread {

    @Override
    public void run() {
        try {
            System.out.println("Thread开始执行");
            Thread.sleep(10_000);
            System.out.println("Thread执行完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

情景一:不设置t为守护线程,默认非守护线程

public static void main(String[] args) {

        DemoThread t = new DemoThread();

        //开启t线程
        t.start();

        //输出main线程的名字
        System.out.println(Thread.currentThread().getName());
    }

情景二:设置t为守护线程

public static void main(String[] args) {

        DemoThread t = new DemoThread();

        //设置t为守护线程
        t.setDaemon(true);
        //开启t线程
        t.start();

        //输出main线程的名字
        System.out.println(Thread.currentThread().getName());
    }

知识点:

1.通过线程.setDaemon(true);设置线程为守护线程。

2.Daemon线程里创建的线程也是Daemon线程。用户线程同样。

3.守护线程与系统“同生共死”

4.程序中全部用户线程执行完毕后JVM直接退出,无需关注是否还存在守护线程。

5.守护线程优先级低

猜你喜欢

转载自blog.csdn.net/Peacock__/article/details/89447473