threadlocal流程图
2021-06-16 13:58:04 0 举报
源码分析
作者其他创作
大纲/内容
如果key不存在也不为空,新建一个Entry存入数组中,size++
做rehash操作
3
是
开始
如果key==null,则代表是过期数据,运行清理逻辑 ,替换过期数据replaceStaleEntry
如果key相等,则更换新值
如果if (size >= threshold - threshold / 4),做resize操作
否
1
从下标开始循环遍历数组中元素不为null的数据
设置值
启发式清理cleanSomeSlots:启发式扫描一些单元格以寻找过时的条目:遍历数据,做探测是清理
结束
如果做了一次启发清理操cleanSomeSlots作并后size>=len * 2 / 3
是否存在
新建ThreadLocalMap
根据当前线程获取ThreadLocalMap
替换过期数据replacestablentry:从key==null的下标开始先向前遍历数组中数据不为空的数据,遇到过期数据,标记效标位置 (slotToExpunge = i),然后向后遍历数据,如果key相等,则替换entry的value,把entry数据和之前开始定位的数据(调用replacestablentry函数时,staleSlot参数,也就是之前key==null的位置)更换位置,启动式清理过期数据,如果遇到过期数据,标记效标位置 (slotToExpunge = i),如果没有以上情况都没有,新建新的entry数组存数据,存放在开始的失效数据位置,启动式清理过期数据
2
计算数组下标值
探测式清理expungeStaleEntry:从key==null标记下标开始,清楚已经过期的数据(key==null),遍历数组中数据不为空的数据,过期的数据删除,没有过期的数据,计算hash值重新定位,如果位置上已经有数据,存放在离这个数据最近的空位
收藏
收藏
0 条评论
下一页