java进阶之路-java中的threadlocal源码实现

本文详细探讨了ThreadLocal的工作原理,包括其内部的ThreadLocalMap结构,如何区分多个ThreadLocal实例的值,以及为何不使用线程作为key的原因。同时介绍了如何通过InheritableThreadLocal在子线程中继承父线程的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文参考:彻底理解ThreadLocal(看这篇文章就够了)
ThreadLocal父子线程传递实现方案

小结

1、threadloca内部维护了一个 map对象,threadlocalmap,key是当前的线程对象thread,value就是set的值
2、thread类内部有一个ThreadLocal.ThreadLocalMap,其实就是threadlocal内部的维护的类,两者是一个,所以这个map是每个对象私有的
3、一个thread维护多个threadlocal,value如何区分,threadlocal内部维护了一个nextHashCode属性,每次都是院子自增,set的时候,会进行key.threadLocalHashCode & (len-1),操作,所以是可以区分出value值的。
4、为何内部的map不用thread作为key来存储呢,线程不安全,需要考虑线程的维护,多个线程操作一个map,需要考虑状态的同步,效率比较低下
5、如果想在子线程中获取父线程的值怎么办,提供了InheritableThreadLocal,在创建的时候,会把父线程的值copy一份到自己的map中,这样就解决了上述的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值