彻底读懂用户线程和守护线程(代码详解)
【辰兮要努力】: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.当然如果程序宕机,看门狗守护线程自然挂掉,自然不会续命,所以锁到期会自动释放,不存在长期持有不释放的问题。
彻底读懂用户线程和守护线程(代码详解)相关推荐
- 额!Java中用户线程和守护线程区别这么大?
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知, ...
- java并发:初探用户线程和守护线程
用户线程和守护线程 用户线程 用户线程执行完,jvm退出.守护线程还是可以跑的 /*** A <i>thread</i> is a thread of execution in ...
- JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程
/*** 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序)* 多线程两种实现方法:1.继承Thread类 2.实现Runnable接口 ...
- Java线程之守护线程(Daemon)
http://blog.csdn.net/mq612/article/details/1520571 守护线程(Daemon) Java有两种Thread:"守护线程Daemon" ...
- Java线程之守护线程(Daemon) .
http://blog.csdn.net/mq612/article/details/1520571 守护线程(Daemon) Java有两种Thread:"守护线程Daemon" ...
- JAVA守护线程 非守护线程
笔记: 第一篇转载写的比较好,将守护线程同linux的守护进程概念进行了对比. 当非守护线程执行完jvm就退出,不管是否还有守护线程在执行.所以守护线程尽量不要执行逻辑代码,顶多执行一些可有可无的辅助 ...
- 一文搞懂线程池原理——Executor框架详解
文章目录 1 使用线程池的好处 2 Executor 框架 2.1 Executor 框架结构 2.2 Executor 框架使用示意图 2.3 Executor 框架成员 2.3.1 Executo ...
- 线程的优先级、等待线程、守护线程
线程的优先级.等待线程.守护线程 我们可以通过 public final void setPriority(int newPriority) 来设置线程的优先级,但是优先级并不是绝对的,只是相对来说比 ...
- java中的后台线程、前台线程、守护线程区别
java中的后台线程.前台线程.守护线程区别 区别和联系 区别 联系 区别和联系 区别 后台线程和守护线程是一样的. 后台线程不会阻止进程的终止,而前台线程会, 可以在任何时候将前台线程修改为后台线程 ...
最新文章
- FreeBSD下安装配置Hadoop集群(四)
- 沉浸式5G实景、AI+AR体验、机器人互动|5G+数智化展馆广州开幕
- POJ 3320 Jessica's Reading Problem (尺取)
- java控制语句案例_Java基础语法—流程控制语句
- [SpringBoot2]错误处理_默认规则
- 软件项目管理第一课—IT项目管理实战案例介绍
- 739. [网络流24题] 运输问题
- 微信第一个“小程序”亮相:不是APP胜似APP!
- Markdown Pad2--公式编辑功能搭建
- mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
- mqtt判断设备是否在线_如何在 Python 中使用 MQTT
- XP停止服务,共建网络安全大环境
- PHP反序列化漏洞(什么是反序列化漏洞及操作)
- vuex , 简单入(liao)门(jie)
- 从零开始搭二维激光SLAM --- 写作计划
- 智慧水务项目建设方案
- consul connect envoy 启动acls和tls后,grpc连接异常
- oracle12c 开启em,Oracle12C的EM无法访问怎么办?
- 全民枪王服务器正在维护,《全民枪王》游戏黑屏怎么办? 游戏进不去解决方法...
- java基于安卓Android微信小程序的音乐论坛uniAPP小程序
热门文章
- 3dmax如何拆分模型_如何在3D Builder中拆分3D模型。 Windows解决方案
- 屠宰场订货系统MySQL_物流配送管理系统(ssm,mysql)
- android极光推送】—从客户端到后台,一文通吃
- 从蒙德里安的《纽约城一号》到我的《北京城七号》
- 这才是世界上最健康的作息时间表
- ​LeetCode刷题实战577:员工奖金
- 怎么样 在 Linux 命令行中生成密码
- 仓储物流中心| 地坪 | 工程设计要点
- Python 获取旅游景点信息及评论并作词云、数据可视化
- .g.i.cs_CS 1.6去鼠标加速参数