ConcurrentHashMap学习笔记

来源:互联网 发布:淘宝页面导航怎么设置 编辑:程序博客网 时间:2024/06/07 10:12

ConcurrentHashMap为线程同步的Map实现,并采用了分段锁的设计,分段锁称为Segment,它即类似于HashMap的结构,即内部拥有一个Entry数组,数组中的每个元素又是一个链表;同时又是一个ReentrantLock(Segment继承了ReentranLock)。其结构图如下:

其类图信息如下


ConcurrentHashMap的操作:

1.get操作

ConcurrentHashMap完全允许多个读操作并发执行,读操作不需要加锁,除非读到的值是空值才会加锁重读。

实现技术:保证HashEntry几乎是不可变的(HashEntry代表每个Hash链中的一个节点)其结构如下

static final class HashEntry<K,V>{

           final K key;

           final int hash;

           volatile V value;

           final HashEntry<K,V> next;//在jdk6中为final,在jdk7以上为volatile

}

2.put操作:由于put方法需要对共享变量进行写入操作,所以为线程安全,在操作共享变量时必须加锁。put方法首先定位到Segment,然后在Segment里进行插入操作。插入操作需要经历两个步骤,第一步判断是否需要对Segment里的HashEntry数组进行扩容,第二补定位添加元素的位置,然后将其放在HashEntry数组里。

原创粉丝点击