侧边栏壁纸
博主头像
Monkey部落博主等级

Monkey部落,分享技术、经验、遇到的问题及解决方法,欢迎大家互相讨论分享。

  • 累计撰写 59 篇文章
  • 累计创建 36 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

谈谈ConcurrentHashMap的扩容机制

Monkey部落
2024-04-07 / 0 评论 / 0 点赞 / 21 阅读 / 284 字
温馨提示:
本文最后更新于 2024-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

谈谈ConcurrentHashMap的扩容机制

  1. 1.7版本
    • 1.7版本的ConcurrentHashMap是基于Segment分段实现的
    • 每个Segment相对于一个小型的HashMap
    • 每个Segment内部会进行扩容,和HashMap的扩容逻辑类似
    • 先生成新的数组,然后转移元素到新数组中
    • 扩容的判断也是每个Segment内部单独判断,判断是否超过阈值
  2. 1.8版本
    • 1.8版本的ConcurrentHashMap不再给予Segment实现
    • 当某个线程进行put时,如果发现ConcurrentHashMap正在进行扩容,那么该线程一起进行扩容
    • 如果当某个线程put时,发现没有正在进行扩容,则将key-value添加到ConcurrentHashMap中,然后判断是否超过阈值,如果超过了则进行扩容
    • ConcurrentHashMap是支持多个线程同时扩容的
    • 扩容之前也先生成一个新的数组
    • 在转移元素时,先将原数组分组,将每组分割不同的线程来进行元素的转移,每个线程负责一组或多组的元素转移工作
0

评论区