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链表组成。如图:
3 内部类