继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ConcurrentHashMap 实现原理概述

MMTTMM
关注TA
已关注
手记 303
粉丝 65
获赞 364

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP