ConcurrentHashMap概念

为什么会有ConcurrentHashMap呢?

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

ConcurrentHashMap的加锁原理

1.7以及之前的版本:

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

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

1.8以及之后的版本:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值