ConcurrentHashMap底层实现#yyds干货盘点#
Posted 孙中明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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总结∶比起Segment,锁拆得更细
ConcurrentHashMap:别的需要注意的点
HashMap线程不安全,数组+链表+红黑树
Hashtable线程安全,锁住整个对象,数组+链表
ConccurentHashMap线程安全,CAS+同步锁,数组+链表+红黑树HashMap的key、value均可为null,而其他的两个类不支持
以上是关于ConcurrentHashMap底层实现#yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
ConcurrentHashMap底层实现原理(JDK1.8)源码分析
ConcurrentHashMap 底层实现原理与线程安全问题
深入浅出 ~ ConCurrentHashMap底层原理透析