为了账号安全,请及时绑定邮箱和手机立即绑定

ConcurrentHashMap 实现原理概述

标签:
Java

ConcurrentHashMap 实现原理

  • HashMap 是非线程安全的,HashTable 是线程安全的,在不考虑性能问题的时候,多线程下可以使用 Hashtable 与 Collections.synchronizedMap(),这两种方式基本都是对整个 hash 表结构做锁定操作,这表明在锁定期间别的线程就需要等待,无疑性能不高,HashTable 容器在竞争激烈的并发环境下效率低下,因为所有访问 HashTable 的线程都必须竞争同一把锁

  • ConcurrentHashMap 使用锁分段技术,将数据分成一段一段的存储,给每一段数据配置一把锁,当一个线程占用锁访问其中一段数据时,其他段的数据也能被其它线程访问

  • 但有些方法需要跨段,如 size() 它可能需要锁定整个表而不是仅仅某个段,这需要按顺序锁定所有段,操作完毕后又按顺序锁定所有段的锁

ConcurrentHashMap结构


  • ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成:

    • Segment 是一种 ReentrantLock

    • HashEntry 用于存储键值对数据

  • 一个 ConcurrentHashMap 里包含一个 Segment 数组,Segment 的结构与 HashMap 类似,是一种链表散列数据结构,一个 Segment 包含一个 HashEntry 数组,每个 HashEntry 是一个链表结构的元素

  • 每个 Segment 维护着一个 HashEntry 数组里的元素,当要对 HashEntry 的数据进行修改时,就必须先获得对应的 Segement 锁


作者:林塬
链接:https://www.jianshu.com/p/8be1d44f92d3


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消