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.mzph.cn/web/74667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker存储策略深度解析:临时文件 vs 持久化存储选型指南

Docker存储策略深度解析:临时文件 vs 持久化存储选型指南 一、存储类型全景对比二、临时存储适用场景与风险2.1 最佳使用案例2.2 风险警示 三、持久化存储技术选型3.1 Volume核心优势Volume管理命令: 3.2 Bind Mount适用边界挂载模式对比: 四…

【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石

📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 目录 一、前言:🔥 I/O 多路转接 为什么需要I/O多路转接? 二、I/O 多路转接之 select 1. 初识 select2. select 函数原型2.1 关于 fd_set 结…

高级:微服务架构面试题全攻略

一、引言 在现代软件开发中,微服务架构被广泛应用于构建复杂、可扩展的应用程序。面试官通过相关问题,考察候选人对微服务架构的理解、拆分原则的掌握、服务治理的能力以及API网关的运用等。本文将深入剖析微服务架构相关的面试题,结合实际开…

使用MQTTX软件连接阿里云

使用MQTTX软件连接阿里云 MQTTX软件阿里云配置MQTTX软件设置 MQTTX软件 阿里云配置 ESP8266连接阿里云这篇文章里有详细的创建过程,这里就不再重复了,需要的可以点击了解一下。 MQTTX软件设置 打开软件之后,首先点击添加进行创建。 在阿…

【HFP】蓝牙Hands-Free Profile(HFP)核心技术解析

蓝牙 Hands-Free Profile(HFP)作为车载通信和蓝牙耳机的核心协议,定义了设备间语音交互的标准化流程,并持续推动着无线语音交互体验的革新。自2002年首次纳入蓝牙核心规范以来,HFP历经多次版本迭代(最新为v…

轻量化大模型微调工具XTuner指令微调实战(下篇)

接着上篇文章《轻量化大模型微调工具XTuner指令微调实战(上篇)》来接着写教程。 一、模型转换 模型训练后会自动保存成 PTH 模型(例如 iter_500.pth),我们需要利用 xtuner convert pth_to_hf 将其转换为 HuggingFace…

pyTorch框架使用CNN进行手写数字识别

目录 1.导包 2.torchvision数据处理的方法 3.下载加载手写数字的训练数据集 4.下载加载手写数字的测试数据集 5. 将训练数据与测试数据 转换成dataloader 6.转成迭代器取数据 7.创建模型 8. 把model拷到GPU上面去 9. 定义损失函数 10. 定义优化器 11. 定义训练…

强化学习课程:stanford_cs234 学习笔记(3)introduction to RL

文章目录 前言7 markov 实践7.1 markov 过程再叙7.2 markov 奖励过程 MRP(markov reward process)7.3 markov 价值函数与贝尔曼方程7.4 markov 决策过程MDP(markov decision process)的 状态价值函数7.4.1 状态价值函数7.4.2 状态…

操作系统 4.5-文件使用磁盘的实现

通过文件进行磁盘操作入口 // 在fs/read_write.c中 int sys_write(int fd, const char* buf, int count) {struct file *file current->filp[fd];struct m_inode *inode file->inode;if (S_ISREG(inode->i_mode))return file_write(inode, file, buf, count); } 进程…

libreoffice-help-common` 的版本(`24.8.5`)与官方源要求的版本(`24.2.7`)不一致

出现此错误的原因主要是软件包依赖冲突,具体分析如下: ### 主要原因 1. **软件源版本不匹配(国内和官方服务器版本有差距) 系统中可能启用了第三方软件源(如 PPA 或 backports 源),导致 lib…

使用Geotools中的原始方法来操作PostGIS空间数据库

目录 前言 一、原生PostGIS连接介绍 1、连接参数说明 2、创建DataStore 二、工程实战 1、Maven Pom.xml定义 2、空间数据库表 3、读取空间表的数据 三、总结 前言 在当今数字化与信息化飞速发展的时代,空间数据的处理与分析已成为众多领域不可或缺的一环。从…

讯飞语音合成(流式版)语音专业版高质量的分析

一、引言 在现代的 Web 应用开发中,语音合成技术为用户提供了更加便捷和人性化的交互体验。讯飞语音合成(流式版)以其高效、稳定的性能,成为了众多开发者的首选。本文将详细介绍在 Home.vue 文件中实现讯飞语音合成(流…

走进未来的交互世界:下一代HMI设计趋势解析

在科技日新月异的今天,人机交互界面(HMI)设计正以前所未有的速度发展,不断引领着未来的交互世界。从简单的按钮和图标,到如今的智能助手和虚拟现实,HMI设计不仅改变了我们的生活方式,还深刻影响…

洛谷题单3-P1217 [USACO1.5] 回文质数 Prime Palindromes-python-流程图重构

题目描述 因为 151 151 151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151 151 151 是回文质数。 写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000…

学习笔记,DbContext context 对象是保存了所有用户对象吗

DbContext 并不会将所有用户对象保存在内存中&#xff1a; DbContext 是 Entity Framework Core (EF Core) 的数据库上下文&#xff0c;它是一个数据库访问的抽象层它实际上是与数据库的一个连接会话&#xff0c;而不是数据的内存缓存当您通过 _context.Users 查询数据时&…

本地命令行启动服务并连接MySQL8

启动服务命令 net start mysql8 关闭服务命令 net stop mysql8 本地连接MySQL数据库mysql -u [用户名] -p[密码] 这里&#xff0c;我遇到了个问题 —— 启动、关闭服务时&#xff0c;显示 “发生系统错误 5。拒绝访问。 ” 解法1&#xff1a;在 Windows 上以管理员身份打开…

数据蒸馏:Dataset Distillation by Matching Training Trajectories 论文翻译和理解

一、TL&#xff1b;DR 数据集蒸馏的任务是合成一个较小的数据集&#xff0c;使得在该合成数据集上训练的模型能够达到在完整数据集上训练的模型相同的测试准确率&#xff0c;号称优于coreset的选择方法本文中&#xff0c;对于给定的网络&#xff0c;我们在蒸馏数据上对其进行几…

【spring cloud Netflix】Ribbon组件

1.基本概念 SpringCloud Ribbon是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。简单的说&#xff0c;Ribbon 是 Netflix 发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法&#xff0c;将 Netflix 的中间层服务连接在一 起。Ribbon 的客户端组件提供…

P1036 [NOIP 2002 普及组] 选数(DFS)

题目描述 已知 n 个整数 x1​,x2​,⋯,xn​&#xff0c;以及 1 个整数 k&#xff08;k<n&#xff09;。从 n 个整数中任选 k 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4&#xff0c;k3&#xff0c;4 个整数分别为 3,7,12,19 时&#xff0c;可得全部的组合与它…

在响应式网页的开发中使用固定布局、流式布局、弹性布局哪种更好

一、首先看下固定布局与流体布局的区别 &#xff08;一&#xff09;固定布局 固定布局的网页有一个固定宽度的容器&#xff0c;内部组件宽度可以是固定像素值或百分比。其容器元素不会移动&#xff0c;无论访客屏幕分辨率如何&#xff0c;看到的网页宽度都相同。现代网页设计…