4-20-ConcurrentHashMap

文章目录
  1. 1. ConcurrentHashMap
    1. 1.1. 减小锁粒度(Segement)
    2. 1.2. 分段锁
    3. 1.3. jdk7和8区别(链表大于8就变红黑树)

ConcurrentHashMap

减小锁粒度(Segement)

Segement的大小也被称为ConcurrentHashMap的并发度。

分段锁

默认是16个段segement。

并不是将整个 HashMap 加锁,而是首先根据 hashcode 得到该表项应该存放在哪个段中,然后对该段加锁,并完成 put 操作。

  1. Segment 是一种可重入锁 ReentrantLock,在 ConcurrentHashMap 里扮演锁的角色,HashEntry 则用于存储键值对数据。
  2. 每个 Segment 守护一个 HashEntry 数组里的元素,当对 HashEntry 数组的数据进行修改时,必须首先获得它对应的 Segment 锁。

image-20210717112440978

jdk7和8区别(链表大于8就变红黑树)