JUC--ConcurrentHashMap

上一篇博文写到如何使hashmap变成线程安全的,提到了ConcurrentHashMap,这里详细总结一下,

hashMap线程不安全只要是对存放进的数据未加锁,多线程的情况下会反生一些奇怪的异常,
hashTable尽管 添加 synchronized
public synchronized V get(Object key) {}
public synchronized V put(K key, V value) {}
但是效率低下.由于synchronized的机制是在同一时刻只能有一个线程操作,其他的线程阻塞或者轮询等待,在线程竞争激烈的情况下,这种方式的效率会非常的低下。Hashtable扩容的时候newSize = 2 * oldSize + 1,这个是常识性的点.初始容量11.
接下来谈谈ConcurrentHashMap为什么效率高.
Hashtable低效主要是因为所有访问Hashtable的线程都争夺一把锁。如果容器有很多把锁,每一把锁控制容器中的一部分数据,那么当多个线程访问容器里的不同部分的数据时,线程之前就不会存在锁的竞争,这样就可以有效的提高并发的访问效率。
ConcurrentHashMap使用的分段锁技术。将ConcurrentHashMap容器的数据分段存储,每一段数据分配一个Segment(锁),当线程占用其中一个Segment时,其他线程可正常访问其他段数据。 ConcurrentHashMap实现分析 在分析ConcurrentHashMap的源码之前先来看看它的结构

JUC--ConcurrentHashMap

续…