news 2026/4/16 18:13:11

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/4/16 13:56:18

前端如何开发ai生成图片及流式回答

一句话总览&#xff08;先给结论&#xff09; 前端 AI 的本质不是“训练模型”&#xff0c;而是&#xff1a; 调用大模型 / 图像模型 API 处理 流式数据&#xff08;Streaming&#xff09; 实时渲染结果&#xff08;文本 / 图片&#xff09; 一、前端如何开发「AI 生成图片」…

作者头像 李华
网站建设 2026/4/16 13:02:46

AI Agent架构大揭秘:从感知到行动,让代码拥有“大脑“!2026年AI开发必备技能,程序员速来围观!

AI Agent 是2026年AI生态的核心概念&#xff0c;它指的是一个具备自主决策、规划和执行能力的数字实体&#xff0c;不再局限于简单的问答或生成式AI&#xff0c;而是能像人类员工一样处理复杂任务。简单来说&#xff0c;Agent 能理解用户意图、分解目标成步骤、调用外部工具或数…

作者头像 李华
网站建设 2026/4/16 13:50:03

汽车制造的设备数据采集:Kepware 与 Takebishi 在总装线的应用对比

汽车制造的数字化&#xff0c;最典型也最“硬核”的场景之一就是总装线&#xff1a;节拍快、工位多、设备类型杂&#xff0c;且质量与追溯要求极高。很多企业在推进 MES、ANDON、质量追溯、设备管理&#xff08;TPM/点检&#xff09;时&#xff0c;都会先遇到同一个问题&#x…

作者头像 李华
网站建设 2026/4/16 14:46:27

基于Springboot琴行学生课程信息管理系统2gt392wb(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。

一、系统程序文件列表二、开题报告内容基于SpringBoot的琴行学生课程信息管理系统开题报告一、研究背景与意义&#xff08;一&#xff09;研究背景随着社会经济的发展和人们生活水平的提高&#xff0c;音乐教育市场呈现出蓬勃发展的态势。琴行作为音乐教育的重要场所&#xff0…

作者头像 李华
网站建设 2026/4/16 14:46:24

当遇到mfcm110.dll文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华