首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么大家都说 ThreadLocal 存在内存泄漏的风险?

    一路分析下来,是不是感觉set()方法还是挺复杂的,总结下来set()大致的逻辑有以下几个步骤: 1.首先获取当前线程对象,检查当前线程中的ThreadLocalMap是否存在 2.如果不存在,就给线程创建一个...ThreadLocal.ThreadLocalMap对象 3.如果存在,就设置值,存储过程中如果存在 hash 冲突时,采用开放寻址法,重新找一个空位进行存储 2.2、get 方法 了解完set()方法之后...,如果存在,就尝试去获取最终的value 3.如果不存在,就重新初始化默认值,以便清理旧的value值 其中expungeStaleEntry()方法是真正用于清理value值的,setInitialValue...三、为什么要用 WeakReference? 另外细心的同学可能会发现,ThreadLocal中真正负责存储key和value变量的是Entry静态类,并且它继承了一个WeakReference类。...回归正题,为什么ThreadLocalMap类中的Entry静态类中的key需要被设计成弱引用类型? 我们先看一张Entry对象的依赖图!

    64010
    领券