ConcurrentHashMap的扩容机制

1.7 版本

  1. 1.7版本的ConcurrentHashMap是基于Segment分段锁实现的
  2. 每个Segment相对于⼀个⼩型的HashMap
  3. 每个Segment内部会进⾏扩容,和HashMap的扩容逻辑类似
  4. 先⽣成新的数组,然后转移元素到新数组中
  5. 扩容的判断也是每个Segment内部单独判断的,判断是否超过阈值
    1.8 版本注意点:
  6. table数组的扩容,⼀般是新建⼀个2倍⼤⼩的数组,这个过程由⼀个单线程完成,不允许并发操
    作;
  7. 数据迁移,可多线程操作。把旧的table各个槽中的结点重新分配到新table中具体如下:
    1、1.8版本的ConcurrentHashMap不再基于Segment实现
    2、 如果某个线程put时,发现没有正在进⾏扩容,则将key-value添加到ConcurrentHashMap中,然后判断是否超过阈值,超过了则进⾏扩容
    3、ConcurrentHashMap是⽀持多个线程同时扩容的
    4、当某个线程进⾏put时,如果发现ConcurrentHashMap正在进⾏扩容那么该线程⼀起进⾏扩容
  8. 扩容之前也先⽣成⼀个新的数组
  9. 在转移元素时,先将原数组分组,将每组分给不同的线程来进⾏元素的转移,每个线程负责⼀组或多组的元素转移⼯作

单线程扩容图解:
在这里插入图片描述

多线程协助扩容图解:
在这里插入图片描述

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值