ConcurrentHashMap源码解析文章总目录
2021/5/7 22:28:24
本文主要是介绍ConcurrentHashMap源码解析文章总目录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
源码逐行解析参考:小刘老师的源码付费课,非常硬核!
- ConcurrentHashMap源码解析_01 成员属性、内部类、构造方法分析
- ConcurrentHashMap源码解析_02 预热(内部一些小方法分析)
- ConcurrentHashMap源码解析_03 put方法源码分析
- ConcurrentHashMap源码解析_04 transfer方法源码分析(难点)
- ConcurrentHashMap源码解析_05 get、remove方法
- ConcurrentHashMap源码解析_06 红黑树的代理类(TreeBin)
下面是引用彤哥源码公众号文章中的片段: ConcurrentHashMap完整小节 上对并发HashMap的简单总结~
总结:
(1)ConcurrentHashMap是HashMap的线程安全版本;
(2)ConcurrentHashMap采用(数组 + 链表 + 红黑树)的结构存储元素;
(3)ConcurrentHashMap相比于同样线程安全的HashTable,效率要高很多;
(4)ConcurrentHashMap采用的锁有 synchronized,CAS,自旋锁,分段锁,volatile等;
(5)ConcurrentHashMap中没有threshold
和loadFactor
这两个字段,而是采用sizeCtl来控制;
(6)sizeCtl = -1
,表示正在进行初始化;
(7)sizeCtl = 0
,默认值,表示后续在真正初始化的时候使用默认容量;
(8)sizeCtl > 0
,在初始化之前存储的是传入的容量,在初始化或扩容后存储的是下一次的扩容门槛;
(9)sizeCtl = (resizeStamp << 16) + (1 + nThreads)
,表示正在进行扩容,高位存储扩容邮戳,低位存储扩容线程数加1;
(10)更新操作时如果正在进行扩容,当前线程协助扩容;
(11)更新操作会采用synchronized锁住当前桶的第一个元素,这是分段锁的思想;
(12)整个扩容过程都是通过CAS控制sizeCtl
这个字段来进行的,这很关键;
(13)迁移完元素的桶会放置一个ForwardingNode节点,以标识该桶迁移完毕;
(14)元素个数的存储也是采用的分段思想,类似于LongAdder的实现;
(15)元素个数的更新会把不同的线程hash到不同的段上,减少资源争用;
(16)元素个数的更新如果还是出现多个线程同时更新一个段,则会扩容段(CounterCell);
(17)获取元素个数是把所有的段(包括baseCount和CounterCell)相加起来得到的;
(18)查询操作是不会加锁的,所以ConcurrentHashMap不是强一致性的;
(19)ConcurrentHashMap中不能存储key或value为null的元素;
- ConcurrentHashMap中有哪些值得学习的技术呢?
- (1)CAS + 自旋,乐观锁的思想,减少线程上下文切换的时间;
- (2)分段锁的思想,减少同一把锁争用带来的低效问题;
- (3)CounterCell,分段存储元素个数,减少多线程同时更新一个字段带来的低效;
- (4)
@sun.misc.Contended
(CounterCell上的注解),避免伪共享; - (5)多线程协同进行扩容;
这篇关于ConcurrentHashMap源码解析文章总目录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版