ConcurrentHashMap在JDK1.7和JDK1.8两个版本有所不同,1.7版本采用分段锁,1.8采用cas加synchronized。
ConcurrentHashMap对比HashMap提高了并发,线程更加安全。
1.7版本采用分段锁技术,采用多个segment,每个segment都用lock锁进行保护,segment是一种可重入锁,HashMap没有锁机制,不是线程安全的。ConcurrentHashMap里面的key不允许为空(null)。
1.7版本的ConcurrentHashMap底层结构是数组+链表(segment+HashEntry),一个segment里面包含一个HashEntry数组,HashEntry是一个链表的数据结构,segment守护它里面的HashEntry的元素,修改HashEntry数组元素时需要先获取segment的锁,1.8版本的ConcurrentHashMap底层结构是数组+链表/红黑树。ConcurrentHashMap默认分为16个segment,比HashTable效率快16倍。ConcurrentHashMap每个segment都有一把锁,HashTable用的一把锁,ConcurrentHashMap的锁粒度更小。
ConcurrentHashMap的点
最新推荐文章于 2024-06-30 00:03:22 发布