须知少年凌云志,曾许人间第一流。这篇文章主要讲述ConcurrentHashMap底层实现#yyds干货盘点#相关的知识,希望能为你提供帮助。
ConcurrentHashMap
文章图片
文章图片
ConcurrentHashMap : put方法的逻辑
1.判断Node[]数组是否初始化,没有则进行初始化操作
2.通过hash定位数组的索引坐标,是否有Node节点,如果没有则使
用CAS进行添加(链表的头节点),添加失败则进入下次循环。
3.检查到内部正在扩容,就帮助它一块扩容。
4.如果头节点f!=null,则使用synchronized锁住f元素(链表/红黑二叉树的
头元素)
4.1如果是Node(链表结构)则执行链表的添加操作。
4.2如果是TreeNode(树型结构)则执行树添加操作。
5.判断链表长度已经达到临界值8,当然这个8是默认值,大家也可以去做调整,当节点数超过这个值就需要把链表转换为树结构。
【ConcurrentHashMap底层实现#yyds干货盘点#】ConcurrentHashMap总结∶比起Segment,锁拆得更细
ConcurrentHashMap:别的需要注意的点
HashMap线程不安全,数组+链表+红黑树
Hashtable线程安全,锁住整个对象,数组+链表
ConccurentHashMap线程安全,CAS+同步锁,数组+链表+红黑树HashMap的key、value均可为null,而其他的两个类不支持
推荐阅读
- 08-docker系列-docker网络你了解多少(上)
- 流量录制与回放在vivo的落地实践
- #yyds干货盘点#Spring源码三千问@Lazy延迟加载与延迟注入有什么区别()
- ES6 新增数据结构,太强了,值得学习
- FFH小熊派驱动调用流程(以调用LED灯驱动为例)
- #yyds干货盘点#这一次,彻底搞懂Promise
- 你会几种读取/加载 properties配置文件方法
- Java深层系列「并发编程系列」让我们一起探索一下CompletionService的技术原理和使用指南
- linux实用技巧(在虚拟机vmware16软件上安装CentOs8.2虚拟机,重置可用源和安装输入法)