ThreadLocal

本文深入解析ThreadLocal的工作原理,包括线程局部变量的线程隔离特性、ThreadLocalMap的实现、内存泄漏问题、set和get操作的细节以及扩容和清理策略。同时讨论了ThreadLocal在异步场景下的局限性和实际应用示例,如在服务调用链追踪中的作用。
摘要由CSDN通过智能技术生成

                1.ThreadLocal对象可以提供线程局部变量,每个线程`Thread`拥有一份自己的副本变量,多个线程互不干扰。线程安全。

                2.ThreadLocalMap`有自己的独立实现,可以简单地将它的`key`视作`ThreadLocal`,`value`为代码中放入的值(实际上`key`并不是`ThreadLocal`本身,而是它的一个弱引用)。

                3.每个线程在往`ThreadLocal`里放值的时候,都会往自己的`ThreadLocalMap`里存,读也是以`ThreadLocal`作为引用,在自己的`map`里找对应的`key`,从而实现了线程隔离。

                4.如果我们的强引用不存在的话,那么 `key` 就会被回收,也就是会出现我们 `value` 没被回收,`key` 被回收,导致 `value` 永远存在,出现内存泄漏。

                5.ThreadLocalMap.set()`第一种情况: 通过`hash`计算后的槽位对应的`Entry`数据为空。这里直接将数据放到该槽位即可。

                        第二种情况: 槽位数据不为空,`key`值与当前`ThreadLocal`通过`hash`计算获取的`key`值一致:这里直接更新该槽位的数据。

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值