news 2026/4/21 18:51:30

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/17 21:38:04

如何在 iOS 设备上理解和分析 CPU 使用率(windows环境)

在日常测试或调试中&#xff0c;CPU 使用率几乎是最容易被提到、却也最容易被误解的指标。 有人看到 CPU 一度飙高就紧张&#xff0c;也有人在卡顿出现时却发现 CPU 看起来“还好”。 真正有价值的不是某个瞬时百分比&#xff0c;而是在什么操作下、哪个进程、持续了多久。 下面…

作者头像 李华
网站建设 2026/4/16 12:36:23

拆开手机电脑看门道!这些硬核硬件知识让你秒变科技达人

拆开手机电脑看门道&#xff01;这些硬核硬件知识让你秒变科技达人一、手机芯片&#xff1a;口袋里的"超级大脑"手机芯片就像迷你版的超级计算机&#xff0c;最新的骁龙8 Gen3和天玑9300都用上了4nm工艺&#xff0c;指甲盖大小的芯片里塞下了上百亿个晶体管。别看它小…

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

定长切纸机PLC程序拆解手记

西门子PLC新手项目程序&#xff08;含触摸屏程序&#xff09; 此定长切纸程序已经实际设备上批量应用&#xff0c;程序成熟可靠&#xff0c;借鉴价值高&#xff0c;程序简单、有注释、非常适合用来西门子plc新手学习&#xff0c;包括西门子plc程序和触摸屏程序&#xff0c;PL…

作者头像 李华
网站建设 2026/4/19 17:01:28

十年游戏运营专家的鸿蒙造梦之旅—孙晨阳揭秘“元星空”制胜之道

“我入行游戏圈已经超过11年了&#xff0c;但我的主业并不是游戏开发&#xff0c;而是偏平台运营以及生态运营。”孙晨阳这样向51CTO介绍着自己的从业背景。你敢信&#xff1f;一位10年的游戏运营者&#xff0c;竟能在2025 HarmonyOS创新赛中击败众多专业团队&#xff0c;一举拿…

作者头像 李华