0
点赞
收藏
分享

微信扫一扫

ConcurrentHashMap概念

闲鱼不咸_99f1 2022-01-20 阅读 41

为什么会有ConcurrentHashMap呢?

HashMap是线程不安全的,在高并发的情况下,两个线程同时对某个哈希桶进行put操作时,可能会导致链表的收尾相接,然后导致线程一直找不到链表末端,造成死循环,导致CPU 100%。

ConcurrentHashMap的加锁原理

1.7以及之前的版本:

分段锁,就是把一个HashMap的一个大数组,分为了很多小数组,然后在每个小数组上加一个锁。

分段锁也是一种思想,虽然HashMap是一个存储数据的数据结构,即使同一时间有很多线程在put数据,但它们put的数据路由到的数组位置是不同的,所以可以把数据进行切割,缩小锁的范围,保证数据安全的同时,可以保证并发量。

1.8以及之后的版本:

HashMap的数组中每个元素,在第一次没有存放数据时,CAS操作成功的线程,成功放入数据。如果有了一个数据,对后面进行的线程进行synchronized,以数组指定位置的一个元素为monitor。

锁的粒度更小了,并发性比1.7及之前的更好,但是思想还是那个思想:缩小锁的粒度。

举报

相关推荐

ConcurrentHashMap

ConcurrentHashMap源码

浅解ConcurrentHashMap

ConcurrentHashMap解析

ConcurrentHashMap随笔

ConcurrentHashMap 并发

HashMap?ConcurrentHashMap?

0 条评论