news 2026/6/10 0:35:47

ThreadLocal

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ThreadLocal

目录

  • 一、使用方式:
  • 二、ThreadLocalMap

一、使用方式:

publicclassThreadLocalManager{privatefinalMap<String,String>map=newHashMap<>();privatestaticfinalThreadLocal<ThreadLocalManager>THREAD_LOCAL=ThreadLocal.withInitial(ThreadLocalManager::new);publicstaticvoidput(Stringkey,Stringvalue){THREAD_LOCAL.get().map.put(key,value);}publicstaticStringget(Stringkey){returnTHREAD_LOCAL.get().map.get(key);}publicstaticvoidremoveCurrentThread(){THREAD_LOCAL.remove();}publicstaticvoidmain(String[]args){try{ThreadLocalManager.put("key","value");System.out.println(get("key"));}finally{ThreadLocalManager.removeCurrentThread();}}}

二、ThreadLocalMap

每个Thread维护一个ThreadLocalMap实例变量,因此每个线程只能操作自己的ThreadLocalMap。使用ThreadLocal只不过是在每个线程的ThreadLocalMap中添加了一个弱引用指向ThreadLocal对象keyEntryThreadLocal本身只是一个访问线程内部ThreadLocalMap实例变量的工具,依靠在线程内部的实例变量上存取数据来保证隔离性。对应上面的代码就是ThreadLocal在线程的ThreadLocalMap实例变量中创建了一个Entry<ThreadLocal,new ThreadLocalManager()>,通过ThreadLocal存取数据本质上是访问线程实例变量ThreadLocalMap中的Entry。

内存泄漏问题:当ThreadLocal对象没有强引用时,那么此时只有Entry的key这个弱引用指向ThreadLocal对象,当GC时ThreadLocal对象就会被回收,此时key指向null,但是value被ThreadLocalMap强引用,所以Entry既不能取出也不会被回收,除非线程结束运行ThreadLocalMap被会收。内存泄漏主要发生在线程池中的线程使用ThreadLocal时,正常结束的请求线程没必要清理,因为ThreadLocalMap会被直接清理。

防止内存泄漏的最好方法就是线程使用完存入ThreadLocal中的数据后及时调用remove()方法清除当前线程中ThreadLocalMap里对应的Entry。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 14:38:43

救命神器!MBA必看!9款AI论文软件测评TOP9

救命神器&#xff01;MBA必看&#xff01;9款AI论文软件测评TOP9 2026年MBA学术写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文软件逐渐成为MBA学习与研究中不可或缺的辅助工具。然而&#xff0c;市面上产品繁多&#xf…

作者头像 李华
网站建设 2026/6/6 6:51:06

PLB-TV影视:无广告+4K高清双buff,核心技术解析

各位影视爱好者与行业同仁&#xff0c;今天分享PLB-TV影视的核心优势——全程无广告干扰原生4K高清体验&#xff0c;背后的技术优化既专业又好懂&#xff0c;适配各类终端观影场景&#xff0c;彻底告别卡顿与广告困扰。 4K高清体验靠硬核编码技术支撑&#xff0c;采用HEVC&…

作者头像 李华
网站建设 2026/6/9 23:18:18

试验台铁地板加工厂家:十字数控滑台安装与维护

好的&#xff0c;关于试验台铁地板加工厂家及十字数控滑台的安装与维护&#xff0c;以下是清晰的解答&#xff1a;1. 厂家选择标准选择试验台铁地板加工厂家时&#xff0c;需重点关注&#xff1a;加工精度&#xff1a;铁地板平面度需满足高精度要求&#xff08;例如平面度误差 …

作者头像 李华
网站建设 2026/6/5 8:55:32

聚焦高端材料研发,国内企业如何应对AI领域的基材需求

AI机器人的视觉处理模块需要依靠摄像头、激光雷达传输大量数据&#xff0c;这就对PCB介质材料提出了56Gbps以上的高频高速要求&#xff0c;PTFE、MPI等高端板材成为关键核心部件。长期以来&#xff0c;这类材料的市场份额主要被美日厂商占据&#xff0c;国内企业的自主研发与替…

作者头像 李华
网站建设 2026/6/6 7:58:08

Spring AI宣布支持Agent Skills,Java开发者的福音

Agent Skills是一种模块化能力&#xff0c;以包含YAML前置元数据的Markdown文件形式打包。每个技能都是一个文件夹,其中包含一个SKILL.md文件&#xff0c;该文件包含元数据&#xff08;至少包括名称和描述&#xff09;以及指导AI Agent如何执行特定任务的说明。Agent Skills&am…

作者头像 李华