查看完整视频
评论可见

您需要在视频最下面评论,方可查看完整视频

积分观看

您支付积分,方可查看完整视频

{{user.role.value}}
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
专属视频

只允许以下等级用户查看该视频

升级
会员专享

ThreadLocal深度源码剖析

课后作业

ThreadLocal怎么解决hash冲突?

6:并发其它

最全Java锁详解:悲观/乐观锁+公平/非公平锁等

2020-8-7 15:24:18

6:并发其它

深入Atomic底层实现原理

2020-8-5 17:29:45

3 条回复 A文章作者 M管理员
  1. 线性探测,根据初始key的hashcode值确定元素在table数组中的位置,如果发现这个位置已经有其他key值的元素占用,则利用固定的算法寻找一定步长的下个位置,依次判断,直到找到能够存放的位置。
    1、找下一个位置,如超出table数组的长度,从table数组的第一个位置找起(自旋)
    2、ThreadLocalMap key是弱引用,key被回收之后,替换掉过期的值,把新值放入

  2. e = tab[i = nextIndex(i, len)]

    ((i + 1 < len) ? i + 1 : 0);
    存储元素的底层是一个数组:Entry[] table; 默认长度是INITIAL_CAPACITY = 16;

    hash冲突采用的线性探测法: 直接定位i下一个元素,如果超过数组长度,索引又从0开始探测,直到找到元素e为空的时候,退出循环,然后插入元素。

  3. 我来总结下:弱引用、Threadlocal原理、适用场景课里都讲过了,这些都属于必考项,如果还想考察,那一定是源码中的细节点(比如:冲突),冲突这个属于加分项,如果都很清楚,说明对ThreadLocal掌握的不错 ✗咧嘴笑✗

个人中心
今日签到
搜索