讲师中心 微信公众号
AI工具推荐 视频效率加速

Java 中线程池如何避免在线程运行期间出现内存泄漏

雨涛吖_6171

雨涛吖_6171

发布时间:2026-08-05 06:48:51

|

558人浏览过

|

来源于php中文网

原创

Java线程池本身不直接导致内存泄漏,但因线程复用机制与ThreadLocal、未关闭资源、静态引用等配合不当而成为高发场景;必须显式调用remove()清理ThreadLocal,禁用Executors工厂方法,严格管控队列容量与线程数,并确保线程池正确关闭。

java 中线程池如何避免在线程运行期间出现内存泄漏

Java 中线程池本身不会直接导致内存泄漏,但它是内存泄漏的高发场景——根本原因在于线程复用机制与 ThreadLocal、未关闭资源、静态引用等配合不当。关键不是“线程池有没有泄漏”,而是“你在它上面放了什么、怎么放、又怎么收”。

必须显式清理 ThreadLocal,不能依赖自动回收

线程池中线程长期存活,而 ThreadLocal 的 value 是强引用,key(即 ThreadLocal 实例)却是弱引用。一旦 ThreadLocal 对象被 GC(比如 static 引用被置为 null 或类卸载),key 变成 null,但 value 仍牢牢挂在 ThreadLocalMap 里,形成“脏项”。空闲线程不执行 get/set/remove 就不会触发探测清理,这些 value 就永远卡在堆里。

  • 所有自定义的 ThreadLocal(尤其是存用户上下文、大 Map、IO 缓冲区等)必须在任务结束时调用 remove(),不能用 set(null) 替代
  • 推荐统一兜底:继承 ThreadPoolExecutor,重写 afterExecute(Runnable r, Throwable t),在里面对每个已知 ThreadLocal 调用 remove()
  • 业务代码仍需套 try-finally:哪怕只读取一次,也建议 get() 后紧跟 remove(),尤其 Web 请求这类短生命周期场景
  • 声明一律用 private static final,便于集中管理;同时提供封装好的 clear() 工具方法

禁止使用 Executors 工厂方法,严控队列与线程边界

无界队列或无限线程数不是性能优化,是 OOM 前奏。任务对象(含请求体、DTO、SQL 参数等)持续堆积在内存中,比 ThreadLocal 泄漏更隐蔽、更猛烈。

java-enterprise
java-enterprise

Java企业开发专家,专注于Spring Boot、微服务架构和JVM优化。适用于:Java语言掌握、

下载
  • 禁用 Executors.newFixedThreadPool() 等——它们底层用 LinkedBlockingQueue(Integer.MAX_VALUE),等于默许任务无限积压
  • 手动构造线程池:选用 ArrayBlockingQueue 并指定合理容量(如 256),让队列大小“看得见、可监控”
  • 核心线程数、最大线程数、队列容量三者需匹配;例如 8 核心线程 + 256 队列,意味着最多缓冲 256 个待执行任务,超限即触发拒绝策略
  • 拒绝策略优先选 CallerRunsPolicy:由提交线程自己执行,天然实现背压,防止上游无节制推送

确保线程池自身被正确关闭

线程池未关闭,不仅造成线程资源滞留,还会让其中所有 ThreadLocal、缓存、连接等“悬停”在内存中,持续占用空间,甚至阻塞 JVM 正常退出。

立即学习“Java免费学习笔记(深入)”;

  • 服务停机时必须调用 shutdown(),再配合 awaitTermination() 等待任务完成,不能只 shutdown 就结束
  • 典型安全模式:先 shutdown(),等待 30 秒;超时后调 shutdownNow(),再等 5 秒;仍未终止则记录告警
  • 更可靠的方式是让线程池实现 AutoCloseable,或交由 Spring 的 @PreDestroy / destroyMethod 统一管理,避免手动遗漏
  • 特别注意:Tomcat/Jetty 等 Web 容器中,线程池若未随应用上下文销毁,其内部持有的 RequestContextHolder、事务上下文等也会持续泄漏

警惕其他常见泄漏源与线程池联动

ThreadLocal 和队列只是冰山一角,很多泄漏是多个因素叠加的结果。

  • 数据库连接、文件流、网络 Socket 等资源,若在任务中打开却未关闭,会随线程复用越积越多——务必用 try-with-resources 或显式 close()
  • 静态集合类(如 static Map<String, Object>)若作为缓存使用,且未设过期或清除机制,会在每个线程处理请求时不断 put,最终撑爆堆内存
  • 监听器、回调函数、Lambda 表达式若捕获了外部大对象或 Activity/Context(Android 场景),也会因线程复用而长期持引用
  • 虚拟线程虽轻量,但若在其内持有 JDBC 连接或未关闭的流,同样会泄漏——资源释放逻辑与平台线程一致,不可放松

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

10217

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

7342

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

6452

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1104

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

908

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1336

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2689

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

20011

2023.08.03

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

40

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn