守护线程详解(作用特点及生命周期)

守护线程详解(作用特点及生命周期)-mikechen

守护线程定义

守护线程是Java中一种特殊类型的线程,其特点是在程序运行时在后台提供服务。

 

守护线程作用

守护线程在Java中的作用,主要体现在以下几个方面:

  1. 在程序运行时提供服务: 守护线程通常用于执行程序的后台任务或,提供服务,例如:垃圾回收、定时任务等。
  2. 执行周期性的任务: 守护线程适用于执行一些需要在后台默默运行的周期性任务,这可以包括定时任务、监控任务等。
  3. 垃圾回收: Java虚拟机中的垃圾回收器(Garbage Collector)是一个典型的守护线程,它负责在后台自动回收不再使用的内存,释放程序中的资源。
  4. 提供服务性质的功能: 守护线程常被用于执行一些不需要等待的、不影响程序正常执行的任务,例如,后台记录日志、清理临时文件等。

 

守护线程特点

守护线程的特点,主要包含如下:

  1. 守护线程是通过将线程的 setDaemon(true) 方法设置为 true 来创建的。
  2. 它们在程序运行时在后台默默地执行任务,不会阻止程序的终止。
  3. 守护线程通常被用于执行一些周期性的任务,如垃圾回收。
  4. 守护线程不能拥有像用户线程那样的资源(文件、数据库连接等)。

 

守护线程生命周期

以下是守护线程的生命周期的基本阶段,主要包含:创建、就绪、运行、终止等阶段。

1.创建阶段

首先是创建阶段,守护线程,可以通过调用线程对象的 setDaemon(true) 方法,将线程设置为守护线程。

如下所示:

Thread daemonThread = new Thread(new MyRunnable());
daemonThread.setDaemon(true);
daemonThread.start();

2.就绪(Ready)

其次,是就绪状态,守护线程处于就绪状态,等待系统分配处理器资源。

3.运行(Running)

一旦分配到资源,它将进入运行状态,守护线程开始执行 run() 方法中的任务。

4.终止(Terminated)

守护线程在以下情况之一发生时会被终止:

  • 它的 run() 方法执行完成。
  • 所有非守护线程都执行完毕,导致程序即将终止。
  • 程序调用了守护线程的 stop() 方法(不推荐使用)。
  • 程序调用了守护线程的 interrupt() 方法,并且线程在检查中断状态时响应了中断。

 

守护线程使用示例

完整的示例,如下:

public class DaemonThreadExample {
    public static void main(String[] args) {
        Thread daemonThread = new Thread(() -> {
            while (true) {
                System.out.println("Daemon Thread is running...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        daemonThread.setDaemon(true); // 将线程设置为守护线程
        daemonThread.start();

        // 主线程休眠一段时间
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Main thread is exiting...");
    }
}

在这个例子中,daemonThread 是一个守护线程,它会一直运行。当主线程休眠5秒后,程序会退出,守护线程也会被自动终止。

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读mikechen更多原创技术文章👇

阿里架构 |双11秒杀 |微服务 |云原生 |Docker |K8S |Kafka |分布式架构 |高并发架构

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法