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

ThreadLocal 实现原理

每个 Thread 中都存储着一个成员变量:ThreadLocalMap

  /** InheritableThreadLocal values pertaining to this thread. This map is* maintained by the InheritableThreadLocal class.*/ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;

ThreadLocal 本身不存储数据,像是一个工具类,基于 ThreadLocal 去操作 ThreadLocalMap,

ThreadLocalMap 本身就是基于 Entry[] 实现的,因为一个线程可以绑定多个 ThreadLocal ,这样可以存储多个数据,所以采用Entry[] 的形式实现。

每个线程都有自己独立的 ThreadLocalMap ,再基于 ThreadLocal 对象本身作为key,对value 进行存取,ThreadLocalMap 的 key 是一个弱引用,弱引用的特点是,即便有弱引用,在GC时,也必须被回收。这里是为了在ThreadLocal 对象失去引用后,如果key 的引用是强引用,会导致 ThreadLocal 对象无法被回收。从而引发一个问题:ThreadLocal 会出现内存泄漏。具体分析参考:         
ThreadLocal的内存泄露问题_threadlocal内存泄漏原因_小孙的Blog的博客-CSDN博客

解决方法:在使用完ThreadLocal 后,及时调用 remove() 方法,移除 Entry 即可

http://www.lryc.cn/news/34117.html

相关文章:

  • BUUCTF [羊城杯 2020]easyre 题解
  • 网络协议(十二):HTTPS(SSL/TLS、TLS1.2的连接)
  • 九九乘法表--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
  • 在超算上安装文件树命令tree
  • 论文投稿指南——中文核心期刊推荐(经济管理)
  • 在vue中如果computed属性是一个异步操作怎么办?
  • SRP合批问题
  • 蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621
  • 数据库连接池
  • Arrays-sort-的用法
  • 华为OD机试真题Java实现【寻找相同子串】真题+解题思路+代码(20222023)
  • 性能指标 确定性能目标 性能场景设计
  • ENVI_Classic:快速入门_菜单栏常见功能的基本介绍
  • 【深度探讨】公共部门在选择区块链平台时要考虑的6个方面
  • 基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像
  • 42-Golang中的单元测试
  • python实现k_means聚类
  • 【批处理脚本】-3.3-exit命令详解
  • 如果读了我2011年求职前端开发的酸爽经历,希望你可以鼓起勇气继续向前
  • PTA:L1-016 查验身份证、L1-017 到底有多二、L1-018 大笨钟(C++)
  • springboot工厂模式解决if_else流程和问题点解决
  • 如何避免缓存击穿?使用GO语言实现sliglefight
  • 【浅学Java】MySQL索引七连炮
  • 扬帆优配|昔日白马股濒临退市,却6天5涨停!ST股突然集体爆发
  • Git 基础(一)—— Git 的安装及其配置
  • 什么是信息安全风险评估?企业如何做?
  • HBase---idea操作Hbase数据库并且映射到Hive
  • 剑指 Offer 61 扑克牌中的顺子
  • Spring 响应式编程-读书笔记
  • CI流水线的理解