JUC--ConcurrentHashMap源码分析(一)(基于JDK1.7)未完待续

1 概述

前面分析研究了HashMap,我们知道HashMap不是线程安全的,那么如果需要线程安全的HashMap怎么办呢?这个时候我们有几种解决方法。

(1)使用HashTable代替HashMap;

(2)使用Collections.synchronizeMap(hashMap);

(3)使用ConcurrentHashMap;

针对这三种方法得区别我们在文章后面再谈,下面我们就针对ConcurrentHashMap(JDK1.7)进行分析。

2 数据结构

ConcurrentHashMap与HashTable不同的是,这里并不是对整个数组加锁,而是对数组进行分段加锁(即对Segment[])进行加锁。所以针对ConcurrentHashMap,只要不同线程获取的不是相同的Segment,就不会产生锁竞争。所以ConcnrrentHashMap比HashTable的效率高很多。

总结来说ConcurrentHashMap的数据结构就是:Segment 数组、HashEntry 数组和HashEntry链表组成。如图:

JUC--ConcurrentHashMap源码分析(一)(基于JDK1.7)未完待续

3 内部类

 

4 属性

5 构造函数

6 核心函数

7 总结