深入解析ThreadLocal(11)
< len) ? i + 1 : 0);}代码执行流程:
A. 首先还是根据key计算出索引 i , 然后查找i位置上的Entry ,
B. 若是Entry已经存在并且key等于传入的key , 那么这时候直接给这个Entry赋新的value值,
C. 若是Entry存在 , 但是key为null , 则调用replaceStaleEntry来更换这个key为空的Entry,
D. 不断循环检测 , 直到遇到为null的地方 , 这时候要是还没在循环过程中return , 那么就在这个null的位置新建一个Entry , 并且插入 , 同时size增加1 。
最后调用cleanSomeSlots , 清理key为null的Entry , 最后返回是否清理了Entry , 接下来再判断sz 是否>= thresgold达到了rehash的条件 , 达到的话就会调用rehash函数执行一次全表的扫描清理 。
重点分析 : ThreadLocalMap使用线性探测法来解决哈希冲突的 。
该方法一次探测下一个地址 , 直到有空的地址后插入 , 若整个空间都找不到空余的地址 , 则产生溢出 。
举个例子 , 假设当前table长度为16 , 也就是说如果计算出来key的hash值为14 , 如果table[14]上已经有值 , 并且其key与当前key不一致 , 那么就发生了hash冲突 , 这个时候将14加1得到15 , 取table[15]进行判断 , 这个时候如果还是冲突会回到0 , 取table[0],以此类推 , 直到可以插入 。
【深入解析ThreadLocal】按照上面的描述 , 可以把Entry[] table看成一个环形数组 。
推荐阅读
- 国家工业互联网标识解析二级节点(威海)上线
- 全新8核国产CPU深入探秘:马上能买到
- 多就是好吗?解析智能手机多摄发展困局
- 新基建下,系统集成商数字化建设及渠道管理深度解析
- 四个维度解析区域发展与治理
- 智媒视角看深圳用数据解析城市
- “联邦的战斗力量”再现,华硕Z490主板机动战士高达版解析
- 天翼云全国首个工业互联网平台二级解析节点上线
- 16G运存+256G内存,专业骁龙865旗舰,性价比深入人心
- 深入理解Netty编解码、粘包拆包、心跳机制