threadlocal

alt alt alt

储存方式:entry数组 key:threadlocal value object(代码中具体的值)

threadlocalmap 只用了数组

threadlocalmap的hash值算法alt

跟斐波那契数有关,每创建一个threadlocl,hash值就加斐波那契数列,让hash分布很均匀。

hash冲突 查找流程:找槽的位置i--看key的hash值--向后找(遇到key==null时触发探测清理) 一直向后找,直到找到个Entry为null的槽

清理过程

探测式清理(set.get会触发探测式清理)以当前元素开始清理,将过期的Entry设为null ,未过期的进行rehash 直到遇到Entry为null的元素为止 启发式清理 从第一个元素开始,循环不断右移,然后对右移的每个元素进行探测式清理

扩容过程 若启发式清理未能清理任何数据,且当前长度达到了阈值的2/3(值为threshold),触发rehash 如果rehash之后 仍然大于3/4 threshold 开始扩容 扩容为原来容量的两倍,重新计算hash值

get过程 从根据hash值取到的位置i开始往后找,碰到null触发探测式清理,直到找到想要元素

InheritableThreadLocal类 threadlocal异步场景下是无法给子线程共享父线程中创建的线程副本数据的。

全部评论

相关推荐

04-30 15:51
已编辑
上海交通大学 机械工程师
点赞 评论 收藏
分享
wuwuwuoow:Redisson 写错了,记得 Redis 儿子以后都不会写错。其他没啥问题,海投就行。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务