当前位置: 首页 > news >正文

java高并发------守护线程Daemon Thread

文章目录

  • 1.概念
  • 2.生命周期与行为
  • 2. 应用场景
  • 3. 示例代码
  • 4. 注意事项

1.概念

Daemon : 滴门

在Java中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。
守护线程是后台线程,主要服务于用户线程,当所有的用户线程结束时,守护线程也会自动结束,JVM会随之退出。
守护线程的一个典型例子是垃圾回收线程。守护线程由JVM自己管理,不需要程序员手动结束。

总结:jvm等用户线程全部执行完,然后拉着守护线程一起死。

2.生命周期与行为

启动与运行:守护线程的启动和普通线程一样,通过调用start()方法进入就绪状态,等待CPU调度执行。

终止条件:守护线程会在以下任一条件满足时终止:

  • 所有非守护线程结束执行。
  • 显式调用Thread.interrupt()或Thread.stop()(已废弃)方法中断线程。
  • 程序中主动调用System.exit()结束JVM。

JVM退出:当最后一个非守护线程终止时,即使守护线程仍在执行某任务,JVM也会立即终止,不会等待守护线程完成其任务。

2. 应用场景

没有特殊应用场景,守护线程可以做的事情用户线程也可以做,只是比用户线程少了一步线程间的通信。

守护线程的适用铁律:
当且仅当任务可接受被随时终止,且其终止不会导致数据损坏或逻辑错误时,使用守护线程。

在java web中没必要使用:

因为在java web 中,比如用springboot 创建的web项目,springboot和其内嵌web服务器(比如tomcat)默认使用都是用户线程,他们的生命周期与jvm是强绑定的,也就是说springboot项目中 若中止所有用户线程,其整个jvm进程就会中止,守护线程又是由jvm管理的,所以springboot项目使用守护线程是没有必要使用,用线程池更好创建用户线程能更方便管理。

3. 示例代码

创建守护线程

public class DaemonTest {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
           while (true){

           }
        },"t1");

        //如果没有设置守护线程,主线程结束,t1线程不会结束
        t1.setDaemon(true);
        t1.start();

        TimeUnit.SECONDS.sleep(3);
        log.debug("main 结束");
    }
}

4. 注意事项

守护线程不能用作访问持久化资源或者写入文件,因为其会被jvm强行中止导致数据不一致。

守护线程的适用铁律:
当且仅当任务可接受被随时终止,且其终止不会导致数据损坏或逻辑错误时,使用守护线程。

http://www.dtcms.com/a/113510.html

相关文章:

  • Redis数据结构之ZSet
  • P3654 First Step (ファーストステップ)
  • Linux:(五种IO模型)
  • 基于SSM的高校宿舍水电管理系统
  • 0201线性回归-机器学习-人工智能
  • 开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法
  • 【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
  • 《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析
  • 如何理解分类(Category)?Kotlin 扩展是何方神圣?C/C++编译器的C/C++扩展
  • 关于 Spring自定义缓存管理器 的详细说明,包含两种实现方式的对比和代码示例,并附表格总结
  • 复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect
  • 多线程代码案例 - 2
  • 高速电路 PCB 设计要点二
  • 【代码模板】如何用FILE操作符打开文件?fopen、fclose
  • KUKA机器人软件WorkVisual更改语言方法
  • Springboot定时任务开发
  • Java 大视界 -- Java 大数据在智能医疗远程护理与患者健康管理中的应用与前景(175)
  • 游戏引擎学习第205天
  • infinityfree最新免费建站详细教程_无需备案_5G空间_无限流量_免费域名_免费SSL
  • [巴黎高师课程] 同步反应式系统(2024-2025)第三课 - Kind 2: 基于SMT的Lustre模型检查器
  • 快速解决 Java 服务 CPU 过高问题指南
  • Tomcat的部署
  • 泡棉压缩对显示模组漏光的定位分析及论述
  • C 语言函数四(递归)
  • Node.js核心模块及Api详解
  • 【Block总结】PlainUSR的局部注意力,即插即用|ACCV2024
  • Synopsys:设计对象
  • Scade One - 可视化编程体验
  • 如何高效使用 Ubuntu 中文官方网站
  • 【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现