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

Java 线程池中 shutdown 与 shutdownNow 的区别是什么?

Java 线程池中 shutdownshutdownNow 的区别


  1. 核心行为差异
    | 方法 | 行为描述 |
    |----------------|----------------------------------------------------------------------------|
    | shutdown | 平缓关闭线程池:
    1. 停止接受新任务。
    2. 已提交的任务(包括队列中的任务)会继续执行完成。 |
    | shutdownNow | 强制关闭线程池:
    1. 停止接受新任务。
    2. 尝试中断正在执行的任务。
    3. 清空任务队列,并返回未执行的任务列表。 |

  1. 线程中断机制
  • shutdown

    • 不中断任何线程,正在执行的任务会继续运行直到完成。
    • 适用于需要确保所有已提交任务完整执行的场景(如数据持久化)。
  • shutdownNow

    • 向所有工作线程发送中断信号(调用 Thread.interrupt())。
    • 任务是否终止取决于代码逻辑:
      • 若任务未检查中断状态(如未捕获 InterruptedException),可能无法终止。
      • 示例:一个循环任务中未调用 Thread.currentThread().isInterrupted(),即使调用 shutdownNow,任务仍会继续运行。

  1. 任务队列处理
    | 方法 | 队列处理 | 返回值 |
    |----------------|----------------------------------------------------------------------------|------------------------------|
    | shutdown | 继续执行队列中所有任务。 | 无返回值。 |
    | shutdownNow | 移除并丢弃队列中所有未执行的任务,返回这些任务的列表(List<Runnable>)。 | 返回未执行任务的列表。 |

  1. 线程池状态变化
  • shutdown

    • 将线程池状态从 RUNNING 改为 SHUTDOWN
    • 最终状态会过渡到 TERMINATED(需所有任务执行完毕)。
  • shutdownNow

    • 将线程池状态从 RUNNING 改为 STOP
    • 最终状态过渡到 TERMINATED(无论任务是否全部完成)。

  1. 适用场景
    | 方法 | 典型场景 |
    |----------------|----------------------------------------------------------------------------|
    | shutdown | 需要确保所有任务完整执行(如数据库批量写入、日志归档)。 |
    | shutdownNow | 紧急终止线程池(如服务宕机前快速释放资源,或处理死锁任务)。 |

实战建议

  1. 优雅关闭的最佳实践:

    • 先调用 shutdown,再通过 awaitTermination 等待任务完成。
    • 若超时未完成,再调用 shutdownNow 强制终止。
    executor.shutdown();
    try {if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {executor.shutdownNow(); // 超时后强制终止 }
    } catch (InterruptedException e) {executor.shutdownNow();
    }
    
  2. 任务代码的容错设计:

    • 在任务中定期检查中断状态,确保能响应 shutdownNow
    public void run() {while (!Thread.currentThread().isInterrupted()) {// 执行任务逻辑 }
    }
    
  3. 监控与日志:

    • 记录 shutdownNow 返回的未执行任务列表,用于故障恢复或重试。

扩展:源码级逻辑

  • shutdown
    • 仅修改线程池状态为 SHUTDOWN,后续执行完队列任务后触发 terminate()
  • shutdownNow
    • 修改状态为 STOP,中断所有工作线程,并清空队列。
    • 源码片段:
      public List<Runnable> shutdownNow() {List<Runnable> tasks;final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {checkShutdownAccess();advanceRunState(STOP);  // 状态改为STOP interruptWorkers();     // 中断所有线程 tasks = drainQueue();   // 清空队列并返回未执行任务 } finally {mainLock.unlock();}tryTerminate();return tasks;
      }
      

总结

  • shutdown 是“礼貌告别”,确保任务善后。
  • shutdownNow 是“强制清场”,适合紧急场景,但依赖任务代码的健壮性。
  • 关键选择点:是否需要保留未执行任务?能否容忍任务中途终止?

相关文章:

Java 线程池中 shutdown 与 shutdownNow 的区别是什么?

Java 线程池中 shutdown 与 shutdownNow 的区别 核心行为差异 | 方法 | 行为描述 | |----------------|----------------------------------------------------------------------------| | shutdown | 平缓关闭线程池&#xff1a;1. 停止接受新任务。2. 已提交的任务&#xff…...

基于Spring Boot的共享学习经验系统的设计与实现

目录 摘 要 第1章 绪论 1.1研究背景与意义 1.2国内外现状 1.3研究目标 第2章 需求分析 2.1业务需求 2.1.1业务概述 2.1.2业务流程 2.2.1用例概述 2.2.2用例描述 2.3非功能性需求 第3章 系统设计 3.1技术路线 3.2系统功能模块设计 3.3系统架构 3.4数据库设计 3.4.1概念结构设…...

【简单的C++围棋游戏开发示例】

C围棋游戏开发简单示例&#xff08;控制台版&#xff09; ‌核心代码实现‌ #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9‌:ml-citation{ref"1" data"citationList&…...

单片机中的基础外设GPIO的知识和应用—(6)

GPIO&#xff08;通用输入输出&#xff09;是单片机与外部世界交互的重要接口。单片机的GPIO引脚可以灵活配置为输入、输出、中断或复用功能&#xff0c;广泛应用于LED控制、按键读取、传感器通信等场景。下文以STM32F103C8T6的GPIO为例。有些51单片机IO功能有的稍微有不同&…...

10-Agent循环分析新闻并输出总结报告

目录 关键词 摘要 速览 自动新闻总结与行业分析报告生成流程 创建深度行业分析报告的工作流 测试用例执行与调试 业务逻辑与循环处理任务 演示如何在循环体中添加链接读取工具 使用大模型处理和分析新闻信息 构建循环分析新闻并生成综合报告的流程 分析和优化慢速循…...

十二、Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离

Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离 Redis Cluster 是 Redis 官方提供的分布式存储方案,通过数据分片(Sharding)实现 水平扩展(scalability),并提供 高可用性(HA) 和 故障自动转移(failover) 能力,解决了单机 Redis 内存受限、主从复制故障…...

贪心算法解题框架+经典反例分析,效率提升300%

贪心算法是一种在每一步选择中都采取当前状态下的最优决策&#xff0c;从而希望最终达到全局最优解的算法策略。以下从其定义、特点、一般步骤、应用场景及实例等方面进行讲解&#xff1a; 定义与基本思想 • 贪心算法在对问题求解时&#xff0c;总是做出在当前看来是最好的选…...

策略设计模式-下单

1、定义一个下单context类 通过这类来判断具体使用哪个实现类&#xff0c;可以通过一些枚举或者条件来判断 import com.alibaba.fastjson.JSON; import com.tc.common.exception.BusinessException; import com.tc.common.user.YjkUserDetails; import com.tc.institution.cons…...

Go加spy++隐藏窗口

最近发现有些软件的窗口就像狗皮膏药一样&#xff0c;关也关不掉&#xff0c;一点就要登录&#xff0c;属实是有点不爽了。 窗口的进程不能杀死&#xff0c;但是窗口我不想要。思路很简单&#xff0c;用 spy 找到要隐藏的窗口的句柄&#xff0c;然后调用 Windows 的 ShowWindo…...

React基础之tsx语法

tsx在jsx的基础上添加了新的类型&#xff0c;除此之外没有任何区别 事件绑定 function App() { const handleClick()>{ console.log(button被点击了); } return( <div className"App"> <button onClick{handleClick}>click me</button> </di…...

一体机:DeepSeek性能的“隐形枷锁”!

一体机是DeepSeek交付的最佳方式吗&#xff1f; 恰恰相反&#xff0c;一体机是阻碍DeepSeek提升推理性能的最大绊脚石。 为啥&#xff1f; 只因DeepSeek这个模型有点特殊&#xff0c;它是个高稀疏度的MoE模型。 MoE这种混合专家模型&#xff0c;设计的初衷是通过“激活一堆专…...

ALBEF的动量蒸馏(Momentum distillation)

简单记录学习~ 一、‌传统 ITC Loss 的局限性‌ ‌One-Hot Label 的缺陷‌ 传统对比学习依赖严格对齐的图文对&#xff0c;通过交叉熵损失&#xff08;如 softmax 归一化的相似度矩阵&#xff09;强制模型将匹配的图文对相似度拉高&#xff0c;非匹配对相似度压低‌11。但 one…...

浏览器WEB播放RTSP

注意&#xff1a;浏览器不能直接播放RTSP&#xff0c;必须转换后都能播放。这一点所有的播放都是如此。 参考 https://github.com/kyriesent/node-rtsp-stream GitHub - phoboslab/jsmpeg: MPEG1 Video Decoder in JavaScript 相关文件方便下载 https://download.csdn.net…...

将PDF转为Word的在线工具

参考视频&#xff1a;外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf...

03. 对象的创建,存储和访问原理

文章目录 01. 对象创建1.1 创建过程概览1.2 类加载检查1.3 为对象分配内存1.4 将内存空间初始化为零值1.5 设置对象的必要信息1.6 总结 02. 对象的内存布局2.1 对象头区域2.2 实例数据区域2.3 对齐填充区域2.4 总结 03. 对象的访问定位其他介绍01.关于我的博客 注&#xff1a;读…...

机器学习-GBDT算法

目录 一. GBDT 核心思想 二. GBDT 工作原理 ​**(1) 损失函数优化** ​**(2) 负梯度拟合** ​**(3) 模型更新** 三. GBDT 的关键步骤 四. GBDT 的核心优势 ​**(1) 高精度与鲁棒性** ​**(2) 处理缺失值** ​**(3) 特征重要性分析** ​五. GBDT 的缺点 ​**(1) 训练…...

redis基础结构

title: redis基础结构 date: 2025-03-04 08:39:12 tags: redis categories: redis笔记 Redis入门 &#xff08;NoSQL, Not Only SQL&#xff09; 非关系型数据库 关系型数据库&#xff1a;以 表格 的形式存在&#xff0c;以 行和列 的形式存取数据&#xff0c;一系列的行和列被…...

【keil】一种将STM32的armcc例程转换为armclang的方式

【keil】一种将所有armcc例程转换为armclang的方式 改的原因第一步下载最新arm6第二步编译成功 第三步去除一些warning编译成功 我这边用armclang去编译的话&#xff0c;主要是freertos中的portmacro.h和port.c会报错 改的原因 我真的服了&#xff0c;现在大部分的单片机例程都…...

计算机视觉算法实战——表面缺陷检测(表面缺陷检测)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 表面缺陷检测是计算机视觉领域中的一个重要研究方向&#xff0c;旨在通过图像处理和机器学习技术自动检测产品表面的缺陷&…...

window下的docker内使用gpu

Windows 上使用 Docker GPU需要进行一系列的配置和步骤。这是因为 Docker 在 Windows 上的运行环境与 Linux 有所不同,需要借助 WSL 2(Windows Subsystem for Linux 2)和 NVIDIA Container Toolkit 来实现 GPU 的支持。以下是详细的流程: 一、环境准备 1.系统要求 Window…...

企业微信消息监听实战:如何实时接收客户消息回调?

自动回复、AI 客服、CRM 联动的核心&#xff0c;其实都是“消息回调”。很多开发者在接入企业微信自动化时&#xff0c;第一个遇到的问题就是&#xff1a;“为什么收不到客户消息&#xff1f;”实际上&#xff0c;企业微信的大部分自动化能力&#xff0c;都是基于“消息监听 消…...

成本数据多系统自动采集与分析实操指南:基于2026大模型Agent的超自动化实践

在2026年的数字化转型深水区&#xff0c;企业对于“成本”的理解已从静态的财务报表演进为实时的流式数据。然而&#xff0c;即便是在大模型技术全面爆发的今天&#xff0c;数据孤岛依然是阻碍成本精细化管理的首要顽疾。成本数据往往碎片化分布在ERP、MES、WMS、供应链平台及各…...

宏和电子冲刺港股:年营收11.7亿,利润2亿 股价一年上涨超10倍 市值1213亿

雷递网 雷建平 5月17日宏和电子材料科技股份有限公司&#xff08;简称&#xff1a;“宏和电子”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。宏和电子2019年7月已在上交所上市。宏和科技在2025年5月时股价才9元&#xff0c;但一年时间股价上涨超过10倍&#xff0…...

2025年macOS菜单栏终极管理方案:开源神器Ice让你的工作区重获新生

2025年macOS菜单栏终极管理方案&#xff1a;开源神器Ice让你的工作区重获新生 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice macOS菜单栏管理工具Ice是一款完全免费的开源神器&#xff0c;专为现代…...

Gemini3.1Pro数据分析报告自动化实战

用 Gemini 3.1 Pro 快速生成数据分析报告并自动可视化&#xff1a;端到端闭环&#xff08;生成—验证—反思—修正—回归&#xff09; 门控降级 4周MVP路线图要“快速生成数据分析报告并可视化”&#xff0c;真正难点不是生成文字&#xff0c;而是把报告做成可核验、可复用、可…...

CSS移动端如何实现平滑滚动效果_设置scroll-behavior smooth属性

...

终极指南:5步快速掌握Aimmy免费AI瞄准辅助工具

终极指南&#xff1a;5步快速掌握Aimmy免费AI瞄准辅助工具 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai/Aimmy 还在为游戏中的瞄…...

如何用JavaScript解放双手:AutoJs6让Android自动化变得简单有趣

如何用JavaScript解放双手&#xff1a;AutoJs6让Android自动化变得简单有趣 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 你是否厌倦了每天在手机上重复点击相同的按钮&#…...

Linux高手必备:从安全操作到高效运维的12个核心习惯

1. 为什么说“习惯”是Linux高手的护城河刚接触Linux那会儿&#xff0c;我总觉得高手和菜鸟的区别在于记住了多少命令、会不会写复杂的脚本。后来踩了无数坑、熬了无数夜、甚至搞崩过几次生产环境后&#xff0c;我才恍然大悟&#xff1a;真正的分水岭&#xff0c;其实藏在那些日…...

Atmosphere 1.7.1:基于安全监控器的任天堂Switch微内核架构深度解析

Atmosphere 1.7.1&#xff1a;基于安全监控器的任天堂Switch微内核架构深度解析 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable Atmosphere 1.7.1是一个针对任天堂Switch游戏主机的完整自定…...