当前位置: 首页 > news >正文

一文了解ThreadLocal

什么是ThreadLocal?

ThreadLocal是每个线程私有的,线程可以把自己的私有数据放到ThreadLocal里面,不用担心其他线程访问到自己ThreadLocal。

通过set()方法将值存入ThreadLocal或者修改值,get()方法取出值,remove()方法移除值。
 

ThreadLocal原理

ThreadLocal类中有一个内部类ThreadLocalMap,它其实就是一个哈希表,当我们往ThreadLocal里面存数据的时候,会通过当前线程得到ThreadLocalMap,以当前ThreadLocal为key,我们set的值为value,存入到ThreadLocalMap这个哈希表中。

如果我们在当前线程定义了多个ThreadLocal,他会存放到唯一的ThreadLocalMap中。

ThreadLocal内存泄露问题

我们知道往ThreadLocal里存放数据时,会存放到ThreadLocalMap中,key是ThreadLocal,value是我们设置的值。但是存放key的时候,不是直接存放的ThreadLocal对象本身,而是存放ThreadLocal的一个弱引用,而value是存放的强引用。在GC时,弱引用被垃圾回收器检查到就会直接回收,而如果线程一直存活的话,这个value也就一直还存在。

避免方法就是在使用完了ThreadLocal之后,一定要用remove方法移除值。

http://www.dtcms.com/a/79278.html

相关文章:

  • 蓝桥杯 因数计数
  • 卷积神经网络 - 汇聚层
  • centos8-安装R+ggplot2
  • Dify:开源大模型应用开发平台全解析
  • 1-1 MATLAB深度极限学习机
  • ‌React Hooks主要解决什么
  • docker pull 提示timeout
  • PHP:从入门到进阶的编程之旅
  • MyBatis源码分析のSql执行流程
  • Rust学习之实现命令行小工具minigrep(一)
  • 从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一点二五 光照贴图(lighting maps)的实现 细嚼慢咽逐条读代码系列
  • nacos安装,服务注册,服务发现,远程调用3个方法
  • 理一理Mysql日期
  • [原创](Modern C++)现代C++的关键性概念: std::mem_fn是std::bind的轻量级版本, 它们的区别是什么?
  • 蓝桥杯嵌入式赛道复习笔记4(TIM输出PWM,TIM输入捕获)
  • Android compose中的附带效应-人话
  • 学习C2CRS Ⅳ (Conversational Recommender Model)
  • IDEA的常用设置与工具集成
  • 玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
  • 第三:go 操作mysql
  • 在 Visual Studio Code 中高效使用 Pylance:配置、技巧与插件对比
  • 25.3.19(java 数据类型 及数据之间的转换)
  • MySQL 面试题
  • Linux 系统性能调优
  • 【leetcode hot 100 994】腐烂的橘子
  • MongoDB 更新集合名
  • UML(统一建模语言)中总共有哪些图
  • VLLM专题(三十六)—自动前缀缓存
  • 当Anaconda的安装路径与我想创建的conda虚拟环境路径不一致时,应该怎么操作?
  • STM32-汇编