如何优雅终止线程/线程池
如何优雅终止线程
分为两个阶段终止线程
1、interrupted(): 让线程从休眠状态转换到RUNNABLE 状态
2、线程终止的标志位:线程会在合适的时机检查这个标志位,如果发现符合终止条件,则自动退出 run() 方法
public class MonitorThread extends Thread {//在监控线程中添加一个volatile类型的标志变量,用于标识是否需要终止线程的执行private volatile boolean terminated = false;public void run() {while (!terminated) {// 执行监控操作System.out.println("监控线程正在执行监控操作...");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}// 执行清理操作System.out.println("监控线程正在执行清理操作...");releaseResources();}public void terminate() {//设置标志变量为true,并等待一段时间terminated = true;try {join(5000); // 等待5秒钟,期间监控线程会检查terminated的状态} catch (InterruptedException e) {e.printStackTrace();}}private void releaseResources() {// 释放资源和进行必要的清理工作System.out.println("监控线程正在释放资源和进行必要的清理工作...");}public static void main(String[] args) throws InterruptedException {MonitorThread thread = new MonitorThread();//启动监控线程thread.start();//主线程休眠期间,监控线程在执行监控操作Thread.sleep(10000);//终止监控线程thread.terminate();Thread.sleep(100000);}
}
如何优雅终止线程池
线程池有两个终止线程池API:shutdownNow()、shotdown()
1、shotdown :会停止线程池接受新的任务,并等待线程池中的所有任务执行完毕,然后关闭线程池。。在调用shutdown()方法后,线程池不再接受新的任务,但是会将任务队列中的任务继续执行直到队列为空。如果线程池中的任务正在执行,但是还没有执行完毕,线程池会等待所有任务执行完毕后再关闭线程池。
2、shutdownNow:会停止线程池接受新的任务,并尝试中断正在执行任务的线程,然后关闭线程池。在调用shutdownNow()方法后,线程池不再接受新的任务,同时会中断正在执行任务的线程并返回一个未执行的任务列表
3、awaitTerminal等待线程池中的任务执行完毕,或者超时时间到达
public static void main(String[] args) throws InterruptedException {ExecutorService executorService = Executors.newFixedThreadPool(5);for (int i = 0; i < 10; i++) {executorService.submit(() -> {try {// 执行任务操作System.out.println(Thread.currentThread().getName() + "正在执行任务...");Thread.sleep(5000);} catch (InterruptedException e) {// 重新设置中断状态Thread.currentThread().interrupt();e.printStackTrace();} finally {System.out.println(Thread.currentThread().getName() + "任务执行完毕");}});}// 停止线程池接受新的任务,但不能强制停止已经提交的任务executorService.shutdown();// 等待线程池中的任务执行完毕,或者超时时间到达boolean terminated = executorService.awaitTermination(3, TimeUnit.SECONDS);if (!terminated) {// 如果线程池中还有未执行完毕的任务,则调用线程池的shutdownNow方法,中断所有正在执行的任务// 如果有还没开始执行的任务,则返回未执行的任务列表List<Runnable> tasks = executorService.shutdownNow();System.out.println("剩余未执行的任务数:" + tasks.size());}}
相关文章:
如何优雅终止线程/线程池
如何优雅终止线程 分为两个阶段终止线程 1、interrupted(): 让线程从休眠状态转换到RUNNABLE 状态 2、线程终止的标志位:线程会在合适的时机检查这个标志位,如果发现符合终止条件,则自动退出 run() 方法 public class MonitorThread extends Thread {/…...
泰迪智能科技实验室产品-云计算资源管理平台介绍
云计算资源管理平台是一款集群应用程序管理平台,以Docker、Kubernetes为核心引擎的容器化应用部署、运行环境,对数据中心的物理服务器、网络、存储、虚拟服务器等基础架构资源进行集中统一的管理、分配、监控等。平台旨在围绕行业应用逐步由“虚拟化”向…...
.Net WebApi启动 Swagger异常报错: Failed to load API definition
问题描述: 基于.Net6.0的WebApi 启动Swagger报错:Failed to load API definition。即无法加载API定义。 解决方法: 分析程序输出日志: 错误信息: ERROR Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMid…...
CSS新手入门笔记【导入方法、选择器介绍、选择器优先级、属性详细介绍、盒子模型】
目录 一、目的与优势二、CSS导入方式三、语法结构四、选择器类型基本选择器组合选择器伪类与伪元素属性选择器 六、选择器优先级总结 六、CSS属性1. 字体与文本属性2. 背景属性3. 尺寸与盒模型属性4. 布局与定位5. 列表样式6. 边框与轮廓7. 文本装饰与效果8. 动画与过渡9. 伪类…...
制作高校专属PPT时,如何将校徽设置成透明底色?无须PS
目录 示例:以清华大学为例 1必应搜索“清华大学校徽” 2保存清华大学校徽及校名。 3将校徽导入到PPT中 4 选中校徽,然后依次选择“图片格式”-->颜色-->设置透明色编辑 5出现“画笔”,由于截图的缘故,画笔没有在截…...
设计模式之【适配器模式】
类适配器实现(继承) 类适配器通过继承来实现适配器功能 // 目标接口 public interface Target {void request(); }// 被适配者 public class Adaptee {public void specificRequest() {System.out.println("Adaptee: specificRequest");} }/…...
AI论文降重:一键操作,让你的论文查重率瞬间下降
高查重率是许多毕业生的困扰。通常,高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法,如修改文本和增添原创内容,虽必要但耗时且成效不一。 鉴于此,应用AI工具进行AIGC降重成为了一个高效的解决方案。这些工具…...
Cmake--学习笔记
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
LangChain让LLM带上记忆
最近两年,我们见识了“百模大战”,领略到了大型语言模型(LLM)的风采,但它们也存在一个显著的缺陷:没有记忆。 在对话中,无法记住上下文的 LLM 常常会让用户感到困扰。本文探讨如何利用 LangCha…...
Word恢复历史文档,记好4个方法就足够
“我正在准备一个重要的报告,但是电脑突然就崩溃了,导致我的文档还没保存就被关闭了,大家有什么方法可以恢复Word历史文档吗?快给我出出主意吧!” 在数字化时代,文档编辑和保存已经成为我们日常工作和学习中…...
收银系统源码-千呼新零售2.0【线上营销】
千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看&a…...
OnlyOffice测评
官方链接: https://www.onlyoffice.com/zh/office-suite.aspx https://www.onlyoffice.com/zh/pdf-editor.aspx OnlyOffice:引领办公效率的新标杆 在数字化时代的浪潮中,办公软件已经成为我们日常工作中不可或缺的一部分。然而,…...
UDS - 8 Application layer protocol
8 应用层协议 来自:ISO 14229-1-2020.pdf 8.1 一般定义 应用层协议应始终是确认消息传输,这意味着对于从客户端发送的每个服务请求,服务器应发送一个或多个相应的响应。 此规则的唯一例外是使用功能寻址或请求/指示指定不生成响应/确认的少数情况。为了不给系统带来许多不…...
二叉树公共最近祖先
文章目录 1. **二叉搜索树(Binary Search Tree, BST)**2. **一般二叉树****递归方法**:**迭代方法**: 案例展示二叉搜索树(BST)中查找LCA一般二叉树中查找LCA1. **使用哈希表存储父节点信息**2. **处理多个查询**3. **异常处理**结…...
智慧运维系统指导规范
随着信息技术的迅猛发展,智慧运维系统在现代企业中扮演着越来越重要的角色。为了提高运维效率、保障系统稳定运行,并制定一套科学、合理的智慧运维系统指导规范至关重要。本规范旨在为企业提供一套全面、系统的智慧运维管理方法和操作准则,以…...
最新自助下单彩虹云商城系统源码,含小储云商城模板免授权
最新彩虹商城源码,含小储云商城模板免授权,试用了一下还行,具体的大家可以看看 源码下载:https://download.csdn.net/download/m0_66047725/89405387 更多资源下载:关注我。...
头条系统-05-延迟队列精准发布文章-概述添加任务(db和redis实现延迟任务)、取消拉取任务定时刷新(redis管道、分布式锁setNx)
文章目录 延迟任务精准发布文章1)文章定时发布2)延迟任务概述2.1)什么是延迟任务2.2)技术对比2.2.1)DelayQueue2.2.2)RabbitMQ实现延迟任务2.2.3)redis实现 3)redis实现延迟任务4)延迟任务服务实现4.1)搭建heima-leadnews-schedule模块4.2)数据库准备4.3)安装redis4.4)项目集成…...
.gitignore git添加忽略文件
在项目的根目录下创建一个名为 .gitignore 的文件。在这个文件中,列出您希望Git忽略的文件和文件夹的名称或模式。 下面是一些基本的步骤和规则: 创建 .gitignore 文件:在项目根目录下创建一个名为 .gitignore 的文件。如果没有这个文件&…...
面向遥感图像的多阶段特征融合目标检测方法
源自:电子学报 作者:陈立 张帆 郭威 黄赟 注:若出现无法显示完全的情况,可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 遥感图像目标具有多尺度、大横纵比、多角度等特性,给传统的目标检测方法带来了新的…...
操作系统面试篇一
很多读者抱怨计算操作系统的知识点比较繁杂,自己也没有多少耐心去看,但是面试的时候又经常会遇到。所以,我带着我整理好的操作系统的常见问题来啦!这篇文章总结了一些我觉得比较重要的操作系统相关的问题比如 用户态和内核态、系统…...
Java中高效移除文本文件标点符号的实用指南
本教程详细阐述了在Java中从文本文件中有效删除标点符号的方法。我们将使用Java NIO的Files.lines()结合Streamm API,重点介绍正则表达式p{Punct}强大的功能,以简单、强大的方式实现文本清洁,避免传统硬编码的局限性,从而提高文本…...
效率直接起飞!盘点2026年全网顶尖的AI论文工具
一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂的AI论文工具,实测提速效果惊人,覆盖选题构思、文献整理、内容生成、格式排版全流程,让你高效搞定论文,告别熬夜赶工。 一、全流程王者:一站式搞定论文全链路&…...
智能客服架构图实战:从高并发设计到生产环境部署
今天想和大家聊聊智能客服系统的架构实战。我们团队最近刚把一个老的单体客服系统重构为微服务架构,主要就是为了应对大促期间的高并发访问。整个过程踩了不少坑,也积累了一些经验,在这里做个梳理和分享。 先说说我们遇到的痛点。原来的系统&…...
桶排序:分布式排序的高效实现
桶排序:分布式排序的高效实现 算法原理 核心思路 桶排序是一种分布式排序算法,其核心思想是: 将待排序的数据分到有限数量的桶里每个桶再分别进行排序(可以使用其他排序算法)最后将各个桶中的数据有序地合并起来 复杂度…...
AI 提示词秒变高手!5 步精准操控法,输出效果直接翻倍
AI 提示词精准操控指南|可直接套用模板想要 AI 输出又快又准,别再靠瞎猜。这套5 步黄金提示法,照着填就能让输出质量翻倍。第一步:锁定目标 —— 用「动词 结果」精准定位模板:生成 / 分析 / 优化【具体内容】&#x…...
如何在3分钟内为Axure RP配置中文界面:终极汉化指南
如何在3分钟内为Axure RP配置中文界面:终极汉化指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 你是…...
开源压枪系统:基于像素识别技术的后坐力补偿解决方案
开源压枪系统:基于像素识别技术的后坐力补偿解决方案 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRecoil-202…...
Qt新手必看:MinGW和MSVC构建套件到底怎么选?保姆级对比指南
Qt构建套件选择指南:MinGW与MSVC深度对比与实战决策 刚接触Qt开发的初学者,往往在配置开发环境的第一步就陷入选择困难——面对MinGW和MSVC这两个构建套件选项,究竟该如何抉择?这个看似简单的选择背后,实则关系到后续开…...
QQ机器人开发零基础入门:LuckyLilliaBot插件完全指南
QQ机器人开发零基础入门:LuckyLilliaBot插件完全指南 【免费下载链接】LuckyLilliaBot NTQQ的OneBot API插件 项目地址: https://gitcode.com/gh_mirrors/li/LuckyLilliaBot 在即时通讯机器人开发领域,如何快速实现QQ平台的自动化交互?…...
Proteus8.9 安装避坑指南:从下载到稳定运行的完整流程
1. 为什么选择Proteus8.9? Proteus作为电子设计自动化(EDA)领域的经典工具,在单片机仿真和电路设计方面一直备受工程师和学生青睐。8.9版本之所以成为众多用户的首选,主要在于它对新型单片机的支持更加完善。比如STC15…...
