码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 面试:ThreadLocal


    目录

    1、ThreadLocal可以实现〔资源对象】的线程隔离,让每个线程各用各的【资源对象】,避免争用引发的线程安全问题

    2、ThreadLocal同时实现了线程内的资源共享

    3、原理

    4、为什么ThreadLocalMap 中的 key (即 ThreadLocal )要设计为弱引用?


    1、ThreadLocal可以实现〔资源对象】的线程隔离,让每个线程各用各的【资源对象】,避免争用引发的线程安全问题

    每个线程获取资源时都会询问当前线程是否有连接对象;

    所以每个线程都会创建一个专用的连接对象接着存入自己的线程,于是形成了线程间的资源隔离隔离。

    2、ThreadLocal同时实现了线程内的资源共享

    同上所述,因为每个线程有一个自己专属的连接对象,所以在线程内,任务都调用的同一个连接对象,于是实现了线程内的资源共享。

    3、原理

    ThreadLocalMap:每个线程内有一个ThreadLocalMap类型的成员变量,用来存储资源对象。

    • 调用set方法,就是以ThreadLocal自己作为key,资源对象作为value,放入当前线程的 ThreadLocalMap集合中
    • 调用get方法,就是以ThreadLocal自己作为 key,到当前线程中查找关联的资源值
    • 调用remove方法,就是以ThreadLocal自己作为 key,移除当前线程关联的资源值

    ThreadLocal的扩容机制是在容量达到三分之二时对存值的HashMap进行倍增;

    当遇到冲突时是进行开放寻址法,从顺序的第一个未存的地址依次往后存;

    4、为什么ThreadLocalMap 中的 key (即 ThreadLocal )要设计为弱引用?

    ThreadLocal的KEY是弱引用的,当java虚拟机内存不够时会将它们所占用的内存释放掉;

    但GC(内存不足)仅是让key的内存释放,后续还要根据key是否为null 来进一步释放值的内存,释放时机有:

    • 获取key发现null key
    • set key时,会使用启发式扫描,清除临近的null key,启发次数与元素个数,是否发现 null key有关(把临近的null key释放掉)
    • remove时(推荐),因为一般使用ThreadLocal时都把它作为静态变量,因此GC无法回收

  • 相关阅读:
    Window Anaconda 安装pytorch 启用cuda 终究手段
    Python协程(asyncio)(二)高级开发
    Vuex存值取值
    测试工程师面试攻略:教你如何描述项目经验
    2023年【N1叉车司机】考试试卷及N1叉车司机考试技巧
    Deno 的配置文件、框架,标准库
    06-linux下的软件包管理 RPM YUM
    轻量级多级菜单控制框架程序(C语言)
    Linux之SSH、rsync
    LVS-DR
  • 原文地址:https://blog.csdn.net/icbbm/article/details/138165266
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号