ThreadLocal源码分析
2025-03-20 16:21:38 0 举报
ThreadLocal源码分析笔记
作者其他创作
大纲/内容
1234
5
888
9
7
冲突
1
111
222
4
3
8
hash:5678idx:4
333
向前检测是否有引用为null的槽位
这时候的hash冲突的解决很简单,在set方法中向后遍历找到空的槽位或者遍历到空槽位之前找到空引用和和当前hash一致的槽位
10
将当前位置到最近的槽位,并且把原来的槽位和当前槽位进行交换
444
向前寻找为null的槽位
槽位后边有空槽位
slotToExpunge=6->10staleSlot=6
hash:1234idx:4
null
5678
0
空槽位
666
2
向后遍历,检测是否有等于当前hashCode的槽位
11
slotToExpunge=6staleSlot=6
555
在ThreadLocal中的遍历都是环形的
将槽位(6)的Value设置为null,并且将新值放入槽位(6)
1010
6
ThreadLocalMap中的hashCode冲突解决
槽位后边有引用null的槽位引用null的槽位大于一个还有空槽位
999
key为null的槽位
这种情况会导致hashCode存在多个槽位中
正常使用槽位
slotToExpunge=6->3staleSlot=6
slotToExpunge=6->2staleSlot=6
向后寻找为null的槽位
槽位后边有引用null的槽位只有一个引用null的槽位还有空槽位
槽位后边有引用null的槽位槽位和前一个引用null槽位之间有空槽位引用null的槽位大于一个槽位后边有要设置的hash值
0 条评论
下一页