ThreadLocal是什么
ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。
下图为ThreadLocal的内部结构图
从上面的结构图,我们已经窥见ThreadLocal的核心机制:
-
每个Thread线程内部都有一个Map。
-
Map里面存储线程本地对象(key)和线程的变量副本(value)
-
但是,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值。
所以对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,形成了副本的隔离,互不干扰。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
视频教程:https://doc.iocoder.cn/video/
ThreadLocalMap
ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也独立实现。
和HashMap的最大的不同在于,ThreadLocalMap结构非常简单,没有next引用,也就是说ThreadLocalMap中解决Hash冲突的方式并非链表的方式,而是采用线性探测的方式。(ThreadLocalMap如何解决冲突? )
在ThreadLocalMap中,也是用Entry来保存K-V结构数据的。但是Entry中key只能是ThreadLocal对象,这点被Entry的构造方法已经限定死了。
staticclassEntryextendsWeakReference<ThreadLocal>{
/**ThevalueassociatedwiththisThreadLocal.*/
Objectvalue;
Entry(ThreadLocalk,Objectv){
super(k);
value=v;
}
}
注意了!!
Entry继承自WeakReference(弱引用,生命周期只能存活到下次GC前),但只有Key是弱引用类型的,Value并非弱引用。(问题马上就来了)
由于ThreadLocalMap的key是弱引用,而Value是强引用。这就导致了一个问题,ThreadLocal在没有外部对象强引用时,发生GC时弱引用Key会被回收,而Value不会回收。
当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocalMap
的键值对,造成内存泄露。(ThreadLocal被回收,ThreadLocal关联的线程共享变量还存在)。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/yudao-cloud
-
视频教程:https://doc.iocoder.cn/video/
如何避免泄漏
为了防止此类情况的出现,我们有两种手段。
1、使用完线程共享变量后,显示调用ThreadLocalMap.remove
方法清除线程共享变量;
既然Key是弱引用,那么我们要做的事,就是在调用ThreadLocal的get()
、set()
方法时完成后再调用remove方法,将Entry节点和Map的引用关系移除,这样整个Entry对象在GC Roots分析后就变成不可达了,下次GC的时候就可以被回收。
2、JDK建议ThreadLocal定义为private static
,这样ThreadLocal的弱引用问题则不存在了。
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
原文标题:ThreadLocal 搭配线程池使用造成内存泄漏的原因和解决方案
文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。
相关推荐
在近日于旧金山举行的IEEE国际电子器件会议(IEDM)上,全球领先的晶圆代工企业台积电揭晓了其备受期待的2纳米(N2)制程技术的详细规格。 据台积电介绍,相较于前代制程技术,N2制程在性能上实现了显著提升,提升幅度高达15%。同时,在功耗控制方面,N2制程也展现出了卓越的能力,功耗降低了30%,能效得到了大幅提升。 N2制程技术的卓越表现得益于多项创新技术的应用。其中,环绕式栅极(GAA)纳米片晶体管技术的引入,使得晶体管密度得到了1.15倍的提
发表于 12-19 10:28
•14次阅读
近日,2024年四川省地理信息产业发展大会在成都举办。本次大会以“创新驱动新质生产力,时空赋能产业化发展”为主题,自然资源部相关领导、行业专家及企业代表,共同探讨地理信息产业的创新发展。四维图新受邀参会并就时空数据创新应用与安全合规等热点话题,发表主题演讲。
发表于 12-19 10:28
•11次阅读
近日,据天眼查知识产权信息显示,百度在线网络技术(北京)有限公司已经正式申请注册了“百度短剧”商标。该商标的国际分类涵盖了网站服务、科学仪器以及教育娱乐等多个领域,且当前商标状态均为等待实质审查。这一举动无疑预示着百度正在积极布局短剧市场,进一步拓展其内容生态。 对于此次进军短剧领域的举措,百度相关负责人给出了积极的回应。他表示,短剧作为当前内容生态的一个重要发展方向,已经受到了越来越多的关注和喜爱。百
发表于 12-19 10:25
•21次阅读
近日,2024年全国大学生嵌入式芯片与系统设计竞赛FPGA创新设计竞赛和2024年中国研究生创“芯”大赛·EDA精英挑战赛陆续落下帷幕。由中国电子学会主办的FPGA创新设计竞赛,以及中国学位与研究生教育学会和中国科协青少年中心主办的创“芯”·EDA挑战赛,旨在提高学生创新实践能力,推动产教融合,在国内享有极高的影响力和权威性。
发表于 12-19 10:21
•21次阅读
非屏蔽六类网线(CAT6 UTP)的标准主要包括以下几个方面: 一、传输速率与频率 传输速率:非屏蔽六类网线支持高达1Gbps(千兆位每秒)的传输速率,适用于快速以太网和千兆以太网等高速网络应用。 传输频率:其传输频率扩展至250MHz或更高,确保了信号在高速传输过程中的稳定性和可靠性。 二、物理参数 裸铜线径:非屏蔽六类网线的裸铜线径通常为0.57mm(线规为23AWG)。 绝缘线径:绝缘层的直径为1.02mm,为信号提供了良好的保护。 电缆直径:对于STP(屏蔽)类
发表于 12-19 10:21
•19次阅读
在当今的工业生产中,真空和负压设备的应用日益广泛,它们在提高生产效率、保障产品质量、保障人员安全、保护环境方面发挥着关键作用。然而,这些设备的可靠性往往受到泄漏问题的影响,一旦发生泄漏,不仅会导致能源费用和整体运营成本增加,还可能引发安全事故,甚至影响整个产线的生产效率。因此,对真空和负压设备进行定期和精确的泄漏检测至关重要。 超声波成像检测通常适用于正压环境,但在真空和负压条件下也能进行有效检漏。尽
发表于 12-19 10:20
•14次阅读
提高三坐标测量机的测量效率是许多制造和质量控制领域中的一个关键问题。三坐标测量机(CMM)是一种精密的测量设备,用于检测零件的几何尺寸和形状。以下是一些提高三坐标测量机测量效率的方法,这些方法可以帮助您优化测量流程,减少测量时间,并提高整体的生产效率。 优化测量程序 预编程 :在测量前对测量路径进行预编程,可以减少在机器上编程的时间。 程序验证 :在实际测量前,使用模拟软件验证测量程序,确保程序的准确性和效率
发表于 12-19 10:20
•23次阅读
此次合作将借助意法半导体的28nm FD-SOI商用量产半导体制造工艺,以实现具有成本竞争力的大型量子计算解决方案 ❖ Quobly和意法半导体计划第一代商用产品将于2027年上市,产品市场定位是材料开发和系统建模等应用 处于量子计算技术前沿的初创公司 Quobly 宣布与 意法半导体 建立变革性合作关系,旨在大规模生产量子处理器单元(QPU)。此次合作将借助意法半导体先进的FD-SOI半导体制造工艺,让大规模量子计算技术具有制造可行性和成本效益,帮助两
发表于 12-19 10:17
•27次阅读
在电力行业中,安全监测是确保电网稳定运行和设备安全运行的基石。随着科技的进步,FLIR Lepton红外热像仪模组凭借其性能和广泛的应用场景,已成为电力系统安全监测的重要工具。 FLIR Lepton系列红外热像仪模组是长波红外(8µm至14µm)热成像模组,结构紧凑、集成度高,实现了各种热成像应用。其低功耗、清晰的图像质量和易于集成支持,为电力系统安全监测提供了有力的支持。 让集成轻而易举 FLIR Lepton红外热像仪模组,机身不足一角硬币大小,可
发表于 12-19 10:17
•22次阅读
由于铁路运营中信号的关键性,为铁路信号实施真正的在线UPS系统涉及多个考虑因素。以下是如何实施此类在线UPS系统的一般概述:在线UPS可用在铁路信令吗?需求分析对信号系统的电源要求进行全面分析,包括峰值功率需求、电压稳定性要求和停电期间所需的备用电源持续时间。系统设计设计一个真正的在线UPS系统,满足信令系统的要求。该UPS系统应提供连续电源,没有任何中断或
发表于 12-19 10:14
•12次阅读
随着全球互联程度日益加深,信息安全与隐私保护已成为监管框架的核心议题。欧盟的无线电设备指令(European Union’s Radio Equipment Directive, RED),尤其是其中的第3.3条款,是确保在欧盟市场上销售的无线设备满足严格信息安全要求的重中之重。最新更新的无线电设备指令(RED)法规,特别是2022/30/EU 授权法规,以及EN 18031:2024无线电设备通用安全要求标准的引入,凸显了对安全数据存储、软件更新恢复力和强大访问控制机制的迫切需求。 华邦电子前沿的
发表于 12-19 10:14
•17次阅读
前段时间,有几个小伙伴问我,多层PCB印制电路板内部长什么样子啊?见过吗?新人对未知的事物都比较好奇,相信很多老人也没怎么看过里面的构造吧。 就想着能够尽可能的满足大家,做一个多层PCB的拆解,然后顺便科普一下相关知识,本文主要从以下三个方面进行讲解。 PCB的组成和概念 PCB的内部结构及叠层设计 多层PCB实物拆解 1、PCB的组成和概念 PCB也叫印制电路板,是英文Printed Circuit Board的首字母缩写。它主要是电子元器件的载体,通过导电铜
发表于 12-19 10:14
•19次阅读
新能源汽车产业迅猛发展,充电桩作为其关键配套设施,建设备受国家政策支持,因此国家已提出了加快充电基础设施建设的明确要求与目标。
发表于 12-19 10:12
•28次阅读
恩智浦半导体(NXP)近日宣布已达成最终协议,将以 2.425 亿美元的全现金交易收购汽车互联技术公司 Aviva Links。 恩智浦表示,作为汽车 SerDes 联盟 (ASA) 兼容车载连接解决方案供应商,Aviva Links 有着业界最先进的 ASA 兼容产品组合,支持数据速率 16 Gbps 的 SerDes 点对点 (ASA-ML) 和基于以太网的连接 (ASA-MLE)。该公司已在两家主要汽车 OEM 厂商处获得了设计订单,并正在向多家 OEM 厂商和一级供应商提供其设备样品。 公开资料显示,汽车 SerDes 联盟成立于 2019 年
发表于 12-19 10:11
•24次阅读
恒流LED阴极驱动器AiP33212,适用于高亮显示LED产品
发表于 12-19 10:09
•15次阅读
评论