ConcurrentHashMap总结

ConcurrentHashMap

容器有16把锁,每把锁对应一个segment数组

为什么要用concurrentHashMap?
1.在并发编程过程中,使用hashMap的话,在put的过程中,因为多线程会导致链表形成环形数据结构。一旦形成环形,next节点永远不为空,就产生了死循环。
2.如果使用hashTable的话,因为底层是用synchronized来保证线程安全的,一旦线程竞争激烈将进入阻塞或者轮询状态,导致效率非常低下。
3.concurrentHashMap采用的锁分段技术,可以提升效率。而且get操作不像hashTable那样才加锁,get要用的共享变量采用的是volatile,所以不需要加锁。效率会很高。


concurrentHashMap什么时候扩容?如何扩容?

1. 先定位到segment数组,判断hshEntry数组是否需要扩容。这也是put的过程。与hashMap不同的是,hashMap是先插入在判断是否要扩容,concurrentHashMap是先判断是否需要扩容,在插入。

2.扩容时,先创建一个与原来两倍的数组。将原来的数据进行散列后在插入新的数组。为了高效,只会对每个segment扩容,不对整个容器扩容。


size操作时怎么实现的?
如果锁住容器计算是低效的。concurrentHashMap采用的是不锁segment进行两次统计判断结果,如果结果一样就返回size。如果不一样就锁住,进行统计。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值