ConcurrentHashMap浅析

  1. 概念
    ConcurrentHashMap实现了Map接口,和HashMap一样,使用K,V形式存储数据,只不过它是线程安全的,不允许有空键空值。
  2. 扩容
    默认容量是16,达到容量的0.75时,容量会扩大一倍。
  3. jdk1.7如何保证线程安全
    jdk1.7中,ConcurrentHashMap采用Segment(数组段)+HashEntry数组+链表实现,每个Segment包含多个HashEntry,HashEntry又是一个链表。Segement在实现上继承了ReentrantLockLock,这样实现分段锁。这样做有2个缺点:
    1.锁的力度有点儿粗;
    2.需要进行两次hash操作, 第一次通过hash值和段数组长度-1计算key落在哪个数组段,第二次通过hash值和table数组长度-1计算落在哪个位置。
  4. jdk1.8如何保证线程安全
    jdk1.8取消了分段锁,采用了CAS+Synchronized来实现,当数组长度达到64,链表超度超过8时,会将单向链表转换成红黑树结构。
  5. 高位迁移原理(1.8后)
    计算存储位置公示:(n-1)&hash,扩容后,有些key在扩容前后hash得到位置发生了变化,需要迁移,位置没变不需要迁移。高位迁移,低位不变。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值