ThreadLocal源码分析

ThreadLocal

ThreadLocal、ThreadLocalMap、Thread、Entry

Thread 持有 ThreadLocalMap
ThreadLocalMap 内部存储是 Entry[]
Entry[] 初始长度 16, 使用长度超过1/2时扩容
Entry[]的索引是 ThreadLocal的 hashcode & (len-1)为初始值,如果已经被占用,则往后循环。没有则存储对应的Entry。
Entry 的key是 ThreadLocal, value是对应的值。
Entry extends WeakReference 弱引用,gc时ThreadLocal回被回收

set方法
ThreadLocal.threadLocalHashCode & (len-1) 为初始index,在Entry[]往后循环寻找坑位
如果Entry为null,则初始化值
如果Entry.key 为null,则是弱引用被回收,则重新实例化Entry
如果Entry和Entry.key都不为null,则替换值

get方法
类似set,ThreadLocal被回收之后重新初始化并返回null

扩容
Entry[]长度超过2/3时触发rehash,清理被gc回收的ThreadLocal
Entry[]长度超过1/2时resize,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值