【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

一、应用案例

在上一篇 基于Redission的分布式锁实战 中给大家介绍了,一个看门狗看门狗就是负责来给redission对应的锁来进行续命的

Redisson 使用看门狗就是我们说的守护线程

本篇就顺路整理相关知识点

Java提供了两种线程:守护线程和用户线程

通过Thread.setDaemon(false)设置为用户线程通过Thread.setDaemon(true)设置为守护线程

如果不设置线程属性,那么默认为用户线程

守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。


二、代码学习

用户线程和守护线程的区别

  • 主线程结束后,用户线程还是会继续运行的,此时 JVM 是存活的
  • 如果没有用户线程,都是守护线程,那么 JVM 结束,则所有的线程都会结束

用户线程

守护线程

程序中通过 thread.setDaemon(true) 将 thread 线程设置为守护线程

用户线程测试验证代码

/*** @author: 辰兮* @create: 2022-08-20 11:13*/
public class TestThread {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(() -> {while (true) {try {Thread.sleep(1000);System.out.println("我是用户线程......");} catch (InterruptedException e) {e.printStackTrace();}}});thread.start();Thread.sleep(3000);System.out.println("主线程执行完毕......");//测试效果:如果主线程结束,用户线程还会继续执行}}

守护线程测试验证代码

/*** @author: 辰兮* @create: 2022-08-20 11:13*/
public class TestThread {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(() -> {while (true) {try {Thread.sleep(1000);System.out.println("我是守护线程......");} catch (InterruptedException e) {e.printStackTrace();}}});// 设置为守护线程thread.setDaemon(true);thread.start();Thread.sleep(3000);System.out.println("主线程执行完毕......");System.out.println("主线程执行完毕后守护线程不再执行......");}}

实践案例

使用Redis 的 SETNX 指令

  • 1.存在锁过期释放了,业务还没执行完。
  • 2.宕机可能导致锁的长期持有不释放等问题

Redisson的看门狗【守护线程】帮我们解决了如上两个问题

  • 1.开启一个定时守护线程,每隔一段时间检查锁是否还存在,存在就自动对锁的过期时间延长,防止锁过期提前释放。
  • 2.当然如果程序宕机,看门狗守护线程自然挂掉,自然不会续命,所以锁到期会自动释放,不存在长期持有不释放的问题。

彻底读懂用户线程和守护线程(代码详解)相关推荐

  1. 额!Java中用户线程和守护线程区别这么大?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知, ...

  2. java并发:初探用户线程和守护线程

    用户线程和守护线程 用户线程 用户线程执行完,jvm退出.守护线程还是可以跑的 /*** A <i>thread</i> is a thread of execution in ...

  3. JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程

    /*** 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序)* 多线程两种实现方法:1.继承Thread类 2.实现Runnable接口 ...

  4. Java线程之守护线程(Daemon)

    http://blog.csdn.net/mq612/article/details/1520571 守护线程(Daemon) Java有两种Thread:"守护线程Daemon" ...

  5. Java线程之守护线程(Daemon) .

    http://blog.csdn.net/mq612/article/details/1520571 守护线程(Daemon) Java有两种Thread:"守护线程Daemon" ...

  6. JAVA守护线程 非守护线程

    笔记: 第一篇转载写的比较好,将守护线程同linux的守护进程概念进行了对比. 当非守护线程执行完jvm就退出,不管是否还有守护线程在执行.所以守护线程尽量不要执行逻辑代码,顶多执行一些可有可无的辅助 ...

  7. 一文搞懂线程池原理——Executor框架详解

    文章目录 1 使用线程池的好处 2 Executor 框架 2.1 Executor 框架结构 2.2 Executor 框架使用示意图 2.3 Executor 框架成员 2.3.1 Executo ...

  8. 线程的优先级、等待线程、守护线程

    线程的优先级.等待线程.守护线程 我们可以通过 public final void setPriority(int newPriority) 来设置线程的优先级,但是优先级并不是绝对的,只是相对来说比 ...

  9. java中的后台线程、前台线程、守护线程区别

    java中的后台线程.前台线程.守护线程区别 区别和联系 区别 联系 区别和联系 区别 后台线程和守护线程是一样的. 后台线程不会阻止进程的终止,而前台线程会, 可以在任何时候将前台线程修改为后台线程 ...

最新文章

  1. FreeBSD下安装配置Hadoop集群(四)
  2. 沉浸式5G实景、AI+AR体验、机器人互动|5G+数智化展馆广州开幕
  3. POJ 3320 Jessica's Reading Problem (尺取)
  4. java控制语句案例_Java基础语法—流程控制语句
  5. [SpringBoot2]错误处理_默认规则
  6. 软件项目管理第一课—IT项目管理实战案例介绍
  7. 739. [网络流24题] 运输问题
  8. 微信第一个“小程序”亮相:不是APP胜似APP!
  9. Markdown Pad2--公式编辑功能搭建
  10. mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
  11. mqtt判断设备是否在线_如何在 Python 中使用 MQTT
  12. XP停止服务,共建网络安全大环境
  13. PHP反序列化漏洞(什么是反序列化漏洞及操作)
  14. vuex , 简单入(liao)门(jie)
  15. 从零开始搭二维激光SLAM --- 写作计划
  16. 智慧水务项目建设方案
  17. consul connect envoy 启动acls和tls后,grpc连接异常
  18. oracle12c 开启em,Oracle12C的EM无法访问怎么办?
  19. 全民枪王服务器正在维护,《全民枪王》游戏黑屏怎么办? 游戏进不去解决方法...
  20. java基于安卓Android微信小程序的音乐论坛uniAPP小程序

热门文章

  1. 3dmax如何拆分模型_如何在3D Builder中拆分3D模型。 Windows解决方案
  2. 屠宰场订货系统MySQL_物流配送管理系统(ssm,mysql)
  3. android极光推送】—从客户端到后台,一文通吃
  4. 从蒙德里安的《纽约城一号》到我的《北京城七号》
  5. 这才是世界上最健康的作息时间表
  6. ​LeetCode刷题实战577:员工奖金
  7. 怎么样 在 Linux 命令行中生成密码
  8. 仓储物流中心| 地坪 | 工程设计要点
  9. Python 获取旅游景点信息及评论并作词云、数据可视化
  10. .g.i.cs_CS 1.6去鼠标加速参数