news 2026/3/13 23:05:06

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/3/8 18:21:46

基因组+单细胞--弥漫性大B细胞淋巴瘤的生物学变异轴向

作者&#xff0c;Evil Genius分享文章之前&#xff0c;大家对基因组 单细胞的联合分析思路有了解了么&#xff1f;单细胞分析的CNV可以和WES的CNV分析相互对应么&#xff1f;比较维度WES-CNV (基于Bulk WES)scCNV (基于scRNA-seq&#xff0c;如inferCNV分析)互补与验证关系检测…

作者头像 李华
网站建设 2026/3/14 9:19:07

火山云豆包:重新定义AI交互,让智能触手可及

火山云豆包&#xff1a;重新定义AI交互&#xff0c;让智能触手可及在人工智能技术日新月异的今天&#xff0c;火山云豆包模型以其卓越的性能和人性化的交互体验&#xff0c;正逐渐成为用户心中智能助手的新标杆。这款由火山引擎自主研发的AI模型&#xff0c;凭借强大的自然语言…

作者头像 李华
网站建设 2026/3/6 1:25:40

小白程序员也能掌握的AI黑科技:本体驱动的零噪声GraphRAG,让知识图谱自我进化,告别“裸奔“数据垃圾场!

今天分享一个不错的开源项目trustgraph&#xff1a;AI 上下文图谱工厂&#xff0c;构建、管理并部署专为 AI 优化的上下文图谱 但是重点要分享的是其中关于本体驱动的零噪声GraphRAG部分 为什么要用本体Ontology尼&#xff0c;原因在于&#xff1a;构建一张会自我完善的知识图…

作者头像 李华
网站建设 2026/3/10 23:59:10

AI负载迅猛增加,隐性DevOps危机正在暴露

固守传统的DevOps团队将越来越难以满足AI时代下的数据需求。成功的团队必须提前布局全面可预测架构&#xff0c;帮助工程师们清晰洞察技术决策与业务成果之间的关联。曾经的运维很简单&#xff1a;选取技术栈中的特定组件&#xff0c;运行单元测试&#xff0c;隔离检查微服务&a…

作者头像 李华