ConcurrentHashMap分析

1、ConcurrentHashMap锁分段技术                    

ConcurrentHashMap使用锁分段技术,首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候其他段的数据也能被其他线程访问。

 2、ConcurrentHashMap的结构                               

ConcurrentHashMap是由Segment数组结构HashEntry数组结构组成。

Segment是一种可重入锁(ReentrantLock),在ConcurrentHashMap里扮演锁的角色;

HashEntry用来存储键值对数据

一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构。

一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素,每个Segment守护着一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得与它对应的Segment锁

 3、ConcurrentHashMap的初始化                                  

通过initialCapacity初始化容量loadFactor负载因子concurrencyLevel等几个参数来初始化segment数组、段偏移量segmentShift、段掩码segmentMask和每个segment里的HashEntry数组来实现的。

 4、定位Segment                                                             

既然ConcurrentHashMap使用分段锁Segment来保护不同段的数据,那么在插入和获取元素的时候,必须先通过散列算法定位到Segment。

 5、ConcurrentHashMap的操作                              

a、get操作

b、put操作

c、size操作

 

posted @ 2017-08-03 16:06  fankongkong  阅读(192)  评论(0编辑  收藏  举报