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

告别 Thread.stop():并发编程的最高礼仪——两阶段终止模式

告别Thread.stop()并发编程的最高礼仪——两阶段终止模式各位正在死磕并发编程的同学们大家平时在学习多线程时可能都看到过书上的一句警告“千万不要使用Thread.stop()来停止线程它是极其危险且已被废弃的”。那么问题来了既然不能直接“杀”掉一个线程我们到底该怎么让一个正在死循环里干活的后台线程停下来这就引出了我们今天的主角也是并发编程领域的一套“最高礼仪”——两阶段终止模式Two-Phase Termination Pattern。这不仅是 Java 工业级项目中的标配更是跨越了语言界限被整个计算机工程界共同奉为圭臬的核心架构心法。一、 核心哲学合作式取消 (Cooperative Cancellation)两阶段终止模式的核心哲学可以用一句话概括不要用暴力直接杀死一个线程而是应该温柔地发个信号给它让它自己料理完后事然后再体面地自尽。这就是所谓的“两阶段”阶段一打招呼主线程向工作线程发送一个“终止信号”比如修改一个volatile标志位或者调用interrupt()。阶段二料理后事工作线程在循环中察觉到了这个信号它主动跳出业务循环执行诸如释放锁、保存数据、关闭网络连接等清理工作最后安全结束运行。二、 Java 中的真实工业级实战场景在企业级开发中只要涉及到常驻的后台任务几乎 100% 都会用到这个模式。理论听着虚我们来看看你在未来工作中一定会遇到的三大真实场景1. 线程池的“优雅关闭”ExecutorService大家都学过ThreadPoolExecutor它的shutdown()方法就是两阶段终止模式的教科书级实现。当你调用shutdown()时线程池绝不会立刻拔电源把所有工作线程杀死。阶段一线程池关闭大门拒绝接收任何新提交的任务。阶段二各个工作线程乖乖把手头正在执行的任务以及任务队列里排队的任务全部执行完最后才自动销毁。2. Spring Boot / Tomcat 的优雅停机Graceful Shutdown想象一下你的电商系统正在进行双十一大促用户刚付完款请求还在 Tomcat 线程里处理。如果这时候运维人员因为要发版重启服务器直接暴力 Kill 掉进程用户的钱扣了但订单状态没更新直接酿成生产事故现代框架的解法就是两阶段终止当服务器收到关机信号如 Linux 的 SIGTERM时Tomcat 先切断网络入口不再接收新 HTTP 请求然后耐心等待所有正在处理的 HTTP 线程把手头的响应完整写回给客户端并且断开数据库连接池料理后事最后才真正退出 JVM。3. 中间件的后台异步刷盘如 Kafka、Redis这些顶级的中间件底层都有无限循环while(true)的后台心跳或刷盘线程。比如 Kafka 的日志刷盘线程当 Broker 关闭时主线程会向刷盘线程发送终止信号。刷盘线程收到信号后必须把内存缓存PageCache里的最后一点消息彻底flush到磁盘上防止数据丢失然后才能安全结束。三、 天下大同其他语言也有这个模式吗这个问题非常有高度。两阶段终止模式绝对不是 Java 的专利拒绝暴力 Kill倡导“合作式取消”是所有支持并发编程的现代语言的共识。很多语言甚至觉得它太重要了直接将其固化到了原生 API 里。我们来看一张跨语言的设计对比表编程语言核心机制与 API实现原理Go (Golang)context标准库官方原生不支持强杀协程。主协程调用cancel()发出信号子协程在一个死循环里通过select监听ctx.Done()管道。收到信号后执行defer资源清理并退出。C# (.NET)CancellationToken微软的设计极其优雅。主线程持有 Source 并调用.Cancel()。工作线程在循环里不断检查token.IsCancellationRequested如果为 true 则体面退出。C 20std::stop_token早年 C 程序员靠手写bool标志位加锁实现。C20 标准直接引入了std::stop_token和std::jthread把两阶段终止做成了原生标准。Pythonasyncio.Task.cancel()在异步 IO 编程中调用cancel()会在协程内部抛出一个CancelledError异常协程捕获该异常并在finally块里做完清理工作再结束。结语对于正在学习技术的同学们来说理解两阶段终止模式标志着你的思维开始从“怎么写出能跑的代码”向“怎么写出健壮、不漏水、符合工程规范的代码”发生蜕变。无论你未来选择 Java、Go 还是 C 作为主语言这种解决资源泄露和防止数据不一致的终极架构心法都将伴随你的整个职业生涯。

相关文章:

告别 Thread.stop():并发编程的最高礼仪——两阶段终止模式

告别 Thread.stop():并发编程的最高礼仪——两阶段终止模式各位正在死磕并发编程的同学们,大家平时在学习多线程时,可能都看到过书上的一句警告:“千万不要使用 Thread.stop() 来停止线程,它是极其危险且已被废弃的”。…...

GEO监测是什么?2026年品牌主必须了解的AI可见度追踪工具

一、从一个真实场景说起 2026年,某消费品品牌的市场总监做了一个测试。 她打开DeepSeek,输入:"XX行业哪些品牌比较值得信赖?" AI给出了五个品牌,她们公司不在其中。 她换了一个问法,再问一次…...

小白也能懂!Claude Code 中 Agent 和 Skill 到底有什么区别?

小白也能懂!Claude Code 中 Agent 和 Skill 到底有什么区别? 你用 Claude Code 的时候,一定见过这两个词:Agent 和 Skill。 它们都能让 Claude 变得更"聪明",但原理完全不同。搞混的人不在少数,包…...

介绍 YugabyteDB MCP Server

介绍 YugabyteDB MCP Server Sfurti Sarah June 10, 2025 概述 YugabyteDB MCP Server 是一个全新的、轻量级的、基于 Python 的服务器,它允许像 Anthropic’s Claude 这样的大语言模型(Large Language Model, LLM)直接与你的 YugabyteDB…...

SEO案例教程有哪些

SEO案例教程有哪些?了解这些将大大提升你的网站排名 在当今的互联网时代,搜索引擎优化(SEO)已经成为每个网站运营者必须掌握的技能。无论你是新手还是有一些经验,了解和学习高质量的SEO案例教程都能帮助你提升网站的排…...

大学物理(Ⅱ)核心公式解析与应用指南

1. 电磁学核心公式解析与应用 电磁学是大学物理(Ⅱ)的重要组成模块,其中包含多个关键公式。我们先从法拉第电磁感应定律说起,这个定律揭示了变化的磁场如何产生电场。在实际应用中,比如发电机的工作原理就基于此。公式…...

JetBrains IDE试用期重置:2026年开发者如何优雅应对评估限制?

JetBrains IDE试用期重置:2026年开发者如何优雅应对评估限制? 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 当你的JetBrains IDE突然弹出"试用期已结束"的提示,打断…...

ECharts地图可视化进阶:如何优雅处理GeoJSON中的飞地与特殊区域(以海南为例)

ECharts地图可视化进阶:GeoJSON飞地与特殊区域处理实战 当我们在使用ECharts进行地理数据可视化时,经常会遇到一些特殊的地理区域处理难题。比如海南省地图中的南海诸岛,由于与主岛距离较远且面积比例悬殊,直接展示会导致可视化效…...

数据库关系演算实战:元组演算与域演算的5个典型查询案例解析

数据库关系演算实战:元组演算与域演算的5个典型查询案例解析 在数据库理论中,关系演算是一种声明式的查询语言,它允许用户描述想要获取的数据,而不需要指定如何获取这些数据。关系演算主要分为两种形式:元组关系演算和…...

保姆级教程!小程序开发只需3步,Gemini设计 + Trae开发 + 微信开发者工具预览上架

大家好,我是李奔腾。今天我想分享一下,如何通过AI工具快速设计和开发一个万年历小程序。借助 Gemini、Trae 和 微信开发者工具,几分钟时间就能让小程序顺利运行起来,极大地提升开发效率。第一步:使用Gemini设计小程序首…...

红外遥控技术原理与电路设计实践

1. 红外遥控技术概述红外遥控技术自20世纪70年代问世以来,已经成为家电控制领域最成熟、应用最广泛的无线控制方案。作为一名电子工程师,我在多个家电项目中都深度应用过这项技术。它的核心原理其实很简单:通过红外发光二极管(IRE…...

未发表!25年顶级SCI算法SOO优化CNN-LSTM-Attention一键实现多步预测!多步预测全家桶更新啦!

目录 多步预测案例 多步预测教程 创新点与原理 ①创新点一:基于CNN-LSTM的多尺度特征联合提取架构 ②创新点二:融合SE通道注意力机制的自适应特征重标定策略 ③创新点三:基于SOO智能算法的超参数自适应寻优 结果展示 全家桶目录 获取…...

网站优化过程中如何防范黑帽SEO行为

网站优化过程中如何防范黑帽SEO行为 在数字营销和网站优化领域,搜索引擎优化(SEO)是一个至关重要的环节。为了迅速提升网站排名,有些人可能会尝试使用“黑帽SEO”手段。这种行为不仅违反了搜索引擎的规则,还可能导致网…...

生化与分子生物学是搞不定导师的脑子的

偶然看到这个图,决定喷一下。为什么呢,因为我高三时候对生化与分子生物学非常感兴趣,我天生对精妙的结构架构比较痴迷,有研究和欲望。甚至考研都想考这个专业。我虽然不知道现在生化和分子生物领域硕博和导师们都在研究什么课题&a…...

智能体“记忆力”评估基准:如何量化记忆的准确性、相关性与时效性?

智能体“记忆力”评估基准:如何量化记忆的准确性、相关性与时效性?二、摘要/引言 (一)开门见山:智能体“失忆症”的真实场景与商业/技术痛点 2025年CES展会首日,某全球TOP3消费电子厂商推出的AI家居管家2.0…...

2026届必备的十大降重复率助手推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 将AI生成文本的机械感予以降低之时,须从词汇、句法、逻辑这三个方面针对指令进行…...

OpenClaw+Docker部署:Kimi-VL-A3B-Thinking多模态环境快速构建

OpenClawDocker部署:Kimi-VL-A3B-Thinking多模态环境快速构建 1. 为什么选择Docker部署OpenClaw 去年我在本地折腾OpenClaw时,被各种依赖冲突和权限问题折磨得够呛。直到尝试用Docker容器化部署,才发现这才是个人开发者快速搭建AI助手环境的…...

康奈尔大学 AlScN/GaN 异质结构研究“单通道和多通道 AlScN 势垒”

康奈尔大学的研究团队声称,利用铝钪氮(AlScN)势垒开发的氮化镓(GaN)单通道和多通道异质结构,实现了迄今为止最低的薄层电阻(Sheet Resistance)。这项工作旨在推动下一代高速、高功率…...

从“数字员工”到“可控系统”:Agent 治理框架与审批流程

从“数字员工”到“可控系统”:Agent 治理框架与审批流程深度解析 摘要/引言 开门见山 你有没有在最近的科技峰会、企业新闻或者 GitHub 热榜里,听到过「Agent 接管 80% 重复性编程工作」「金融客服 Agent 日处理量破百万件」这类令人振奋又隐隐不安的消息?上周我和某银行…...

实战:多语言翻译协作 Agent Harness

实战:多语言翻译协作 Agent Harness 1. 标题 (Title) 从零构建多语言翻译协作系统:Agent Harness 实战指南 多 Agent 协作新范式:打造智能多语言翻译 Harness 框架 告别单一翻译模型:构建协作式多语言翻译 Agent 系统 Agent Harness 实战:如何让多个 AI 代理协同完成专业…...

macOS高效配置:OpenClaw与Qwen3.5-9B镜像深度集成指南

macOS高效配置:OpenClaw与Qwen3.5-9B镜像深度集成指南 1. 为什么选择OpenClaw与Qwen3.5-9B组合 去年冬天,当我第一次尝试用AI自动化处理日常工作报告时,发现大多数云端方案要么功能受限,要么隐私性存疑。直到遇见OpenClaw这个能…...

STM32+MATLAB数据采集避坑指南:你的串口丢包、乱码可能和这3个参数有关

STM32与MATLAB串口通信的稳定性优化:从参数配置到实战调试 在嵌入式系统与上位机通信的众多方案中,STM32与MATLAB通过串口进行数据交互是最为经典且广泛应用的组合之一。这种组合充分利用了STM32在实时控制方面的优势以及MATLAB在数据分析与可视化上的强…...

OpenClaw自动化写作:Qwen2.5-VL-7B生成图文并茂技术文档

OpenClaw自动化写作:Qwen2.5-VL-7B生成图文并茂技术文档 1. 为什么需要自动化技术文档写作 作为一个经常需要编写技术文档的开发者,我深知文档写作的痛点。每次完成一个功能模块后,总要花大量时间整理代码片段、截图、编写说明文字。最麻烦的…...

OpenClaw成本控制:Qwen3.5-9B任务拆分与Token节省策略

OpenClaw成本控制:Qwen3.5-9B任务拆分与Token节省策略 1. 为什么需要关注OpenClaw的Token消耗? 去年夏天,当我第一次在本地部署OpenClaw对接Qwen3.5-9B模型时,被一个简单的文件整理任务消耗了将近2000个Token。这让我意识到&…...

开源力量:OpenClaw+gemma-3-12b-it构建低成本个人AI助手

开源力量:OpenClawgemma-3-12b-it构建低成本个人AI助手 1. 为什么选择开源模型OpenClaw组合? 去年我尝试用商业API搭建个人自动化助手时,发现两个致命问题:一是每月Token费用超过预期3倍(主要来自长链条任务的反复调…...

WPS JS宏利用Fetch API实现网页数据抓取与Excel自动化处理

1. 为什么需要网页数据抓取与Excel自动化 在日常办公中,我们经常需要从各种网站获取数据并整理到Excel表格中。比如市场人员需要抓取竞品价格、财务人员需要获取汇率数据、运营人员需要统计社交媒体互动情况。传统做法是手动复制粘贴,不仅效率低下&#…...

STM32F103 OTA升级实战:用bsdiff差分算法把固件包缩小90%(附完整工具链)

STM32F103 OTA升级实战:用bsdiff差分算法把固件包缩小90%(附完整工具链) 在物联网设备快速迭代的今天,OTA(Over-The-Air)升级已成为嵌入式开发的标配功能。但对于资源受限的STM32F103这类Cortex-M3内核MCU来…...

别再死记硬背CAN协议了!用STM32CubeMX+USB-CAN分析仪,5分钟搞定物理层与数据链路层实战

用STM32CubeMXUSB-CAN分析仪5分钟掌握CAN核心原理 当你第一次接触CAN总线时,是否被那些晦涩的术语搞得一头雾水?显性电平、位填充、采样点、仲裁机制...这些概念在纯理论讲解中往往显得抽象难懂。但今天,我要带你用一种全新的方式学习CAN——…...

从Remix到Ganache:一次智能合约部署的完整“后台日志”解读

从Remix到Ganache:智能合约部署的"后台日志"深度解析 当你第一次成功部署智能合约时,看到Ganache和Remix控制台输出的那一大串信息,是不是感觉像在看天书?那些Block Hash、Gas Used、txIndex究竟在说什么?这…...

seo在线分析技巧有哪些

SEO在线分析技巧有哪些? 在当今的数字化时代,搜索引擎优化(SEO)已经成为了每一个网站和在线业务的关键。特别是在百度这样的中文搜索引擎平台上,掌握SEO在线分析技巧对提升网站的可见度和流量至关重要。具体有哪些SEO…...