JDK 1.7ConcurrentHashMap 的理解

CurrentHashMap 中采用分段加锁,扩容操作也是针对某个segment,segment 是继承 Reentrantlock 来实现并发安全的。put操作的逻辑是这样的,首先需要找到Segment数组中的索引来找到该(key,value)应该放到哪个Segment 中,注意segment不存在的时候需要创建,这时候就需要cas 来保证只有一个线程来创建,其他线程使用这个线程创建好的Segment.拿到segment后需要put 到其正确的HashEntry[]数组中的某个位置上,这时候需要进行加锁,加锁有阻塞式和非阻塞式 即tryLock() 和 lock() ,然后进行头插法插入。 插入的过程需要考虑扩容,doug len 进行了细节上的优化,比如对尾部节点的同属一个位置的结点 进行整体迁移。

CurrentHashMap 中大量使用了unsafe类的对于内存 和对象的操作以及cas的操作。

重要的字段 concurrentLevel 并发级别默认是16 (为2 的幂次方)并发水平重要度量
其实Segment 才相当于HashMap 其继承了ReentrantLock 并包含了负载因子、容量 、大小等 属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值