码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ThreadLocal的原理和使用场景


    每一个 Thread 对象均含有一个 ThreadLocalMap 类型的成员变量 threadLocals ,它存储本线程中所 =有ThreadLocal 对象及其对应的值 ThreadLocalMap 由一个个 Entry 对象构成 Entry 继承自 WeakReference> ,一个 Entry 由 ThreadLocal 对象和 Object 构 成。由此可见, Entry 的 key 是 ThreadLocal 对象,并且是一个弱引用。当没指向 key 的强引用后,该 key就会被垃圾收集器回收 当执行set 方法时, ThreadLocal 首先会获取当前线程对象,然后获取当前线程的 ThreadLocalMap 对 象。再以当前ThreadLocal 对象为 key ,将值存储进 ThreadLocalMap 对象中。
    get 方法执行过程类似。 ThreadLocal 首先会获取当前线程对象,然后获取当前线程的 ThreadLocalMap
    对象。再以当前 ThreadLocal 对象为 key ,获取对应的 value 。
    由于每一条线程均含有各自 私有的 ThreadLocalMap 容器,这些容器相互独立互不影响,因此不会存在
    线程安全性问题,从而也无需使用同步机制来保证多条线程访问容器的互斥性。
    使用场景:
    1 、在进行对象跨层传递的时候,使用 ThreadLocal 可以避免多次传递,打破层次间的约束。
    2 、线程间数据隔离
    3 、进行事务操作,用于存储线程事务信息。
    4 、数据库连接, Session 会话管理。
    ThreadLocal 内存泄露原因,如何避免
    内存泄露为程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露
    堆积后果很严重,无论多少内存 , 迟早会被占光,
    不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露。
    强引用:使用最普遍的引用 (new) ,一个对象具有强引用,不会被垃圾回收器回收。当内存空间不足,
    Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不回收这种对象。
    Spring 框架在事务开始时会给当前线程绑定一个 Jdbc Connection, 在整个事务过程都是使用该线程绑定的
    connection 来执行数据库操作,实现了事务的隔离性。 Spring 框架里面就是用的 ThreadLocal 来实现这种 隔离
  • 相关阅读:
    2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛 L:String Games
    OpenCV14-图像平滑:线性滤波和非线性滤波
    springboot设置时区
    Java学习Day031(异常)
    Guava类库——Table详解
    禁止ios和android用户选中文字
    《树莓派4B家庭服务器搭建指南》第二十一期:安装开源远程桌面服务rustdesk, 内网丝滑,外网流畅控制
    揭秘提升远程团队协作效率的秘密武器:这款在线白板工具不容错过!
    [免费专栏] Android安全之Linux+Windows安装r2Frida环境配置及使用
    态势丨黑客侵扰加剧,靶场为网络安全架设“防御盾”
  • 原文地址:https://blog.csdn.net/weixin_62595121/article/details/134552638
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号