目录
JKD1.8以前
首先将数据分为一段一段的来进行存储,然后给每一段数据分配一把锁,当一个线程占用锁访问一段数据时,其他数据也能被其他线程访问。
ConcurrentHashMap由Segment和HashEntry组成。
一个ConcurrentHashMap里包含一个Segment数组,一个Segment又包含一个HashEntry。
在JDK1.8以后
ConcurrentHashMap取消了Segment分段锁,采用synchronized和CAS来保证并发安全。数据结构为数组+链表+红黑树。
Synchronized只锁定当前链表或红黑树的首节点,这样只要hash不冲突就不会产生并发。