news 2026/4/18 9:52:48

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/18 8:56:39

在3D设计课上,国产CAD兼顾入门与实战

我在职校教3D设计课&#xff0c;真的很头疼用哪个牌子的软件。有些孩子基础很差&#xff0c;对电脑操作很不敏感&#xff0c;不能用过于复杂的软件作为教学工具&#xff0c;但用的软件太简单又不能很好的衔接企业实际岗位标准&#xff0c;课就白上了。要选一款既要贴合学生的认…

作者头像 李华
网站建设 2026/4/18 6:38:27

React Vue 如何让 Cookie 逻辑“秒变优雅”?

你是否还在为 document.cookie 的手动操作头疼&#xff1f;设置一个登录 token&#xff0c;还得手动处理编码、路径、过期时间&#xff0c;一不小心就触发跨域错误或 XSS 风险&#xff1f;更糟的是&#xff0c;每次写代码都像在玩“cookie 拼图”——要么漏了 HttpOnly&#xf…

作者头像 李华
网站建设 2026/4/18 1:34:38

深度剖析eBPF技术原理及其在微服务网关性能优化中的实践应用

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

作者头像 李华
网站建设 2026/4/18 6:34:52

三菱FX5U实现4层电梯升降控制:PLC与触摸屏程序全解析

三菱FX5U控制的4层电梯升降&#xff0c;系统为FX5UFX5-40SSC-S简单运控模块。 包含一个PLC程序和触摸屏程序。 程序有详细的注释。一、引言 在自动化控制领域&#xff0c;电梯控制是一个经典且应用广泛的场景。本文将介绍如何使用三菱FX5U系列PLC搭配FX5 - 40SSC - S简单运控模…

作者头像 李华
网站建设 2026/4/18 7:28:04

Tomcat架构与核心组件面试题

基础级别 1. 什么是Apache Tomcat?它的主要作用是什么? 答案: Apache Tomcat是一个开源的Java Servlet容器和Web服务器,由Apache软件基金会开发和维护。它实现了Java Servlet、JavaServer Pages (JSP)、Java Expression Language和Java WebSocket等Java EE规范。 主要作用: 作…

作者头像 李华