JDK1.7 的concurrentHashMap
结构:JDK1.7版本的concurrentHashMap和JDK1.7的hashmap的结构的区别就是加上了一层segment数组,当然加上这个数组也是为了并发时候的安全性,所以其结构就是segment数组+数组+链表的结构,每个segment中的有一个数组+链表的结构,初始的大小为16,阈值也是0.75。
安全机制:
对于jdk1.7的concurrenthashmap的安全性,是通过synchronized加在segment数组上来保证的,也就是我们常说的段锁,对于一个段加锁之后,这个段上其他的节点就不能被操作了,但是一个段上加锁之后,并不影响其他段的操作,所以就在安全的环境下大大提高了并发性。
JDK1.8的concurrentHashMap
结构和安全机制
JDK1.8版本的concurrentHashMap和JDK1.8的hashmap的结构的区别就是使用了synchronized和CAS机制,当然加上synchronized和CAS机制也是为了并发时候的安全性,所以主要是操作的时候加上了锁的影响,在添加数据的时候会先对指定的节点加上Synchronized锁,然后在进行CAS方式插入数据,因为Synchronized锁的是数组中的一个几点而不是整个数组,所以并发也很高,初始的大小为16,阈值也是0.75。
注意:JDK1.8的concurrentHashMap扩容特点:多线程并行扩容,因为synchronized所得是单个节点,所以可以多个线程并行扩容,暴增安全的前提下提高了扩容的速度,其次统计数量的时候如果并发较高可以使用数组统计之后,把数组中的都加到一起。