ConCurrentHashMap常见面试题

  1. JDK1.7和JDK1.8中ConCurrentHashMap的实现有什么不同?

JDK1.7中的实现可以认为是大数组套小数组,大数组是Segment数组,小数组是HashEntry数组,锁是锁在大数组的元素上(Segment),力度比较大,原理如下

这是一种分段锁(或者叫做分片锁)的实现。

JDK1.8中

  1. 1.7和1.8中的ConCurrentHashMap怎么保证的线程安全?

1.7中通过给Segment加ReentrantLock锁来实现线程安全。

在线程安全方面,如果存储元素的计算结果为空,会使用CAS来设置该节点,如果不为空就会使用synchronized加锁来实现,遍历桶中的元素,替换或者新增元素到桶中,最后判断是否需要转为红黑树(链表长度大于8并且数组的长度大于64的时候,链表升级为红黑树的结构),整个过程相当于只对头结点进行了加锁,比Segment加锁力度更小,发生加锁和hash冲突的频率也更低了,并发场景下性能更高,因为使用了红黑树,数据量比较大的时候查询性能更好

关于1.8中的一些核心方法可以查看我的另一篇关于源码分析的文章ConCurrentHashMap源码分析_鱼跃鹰飞的博客-CSDN博客,1.7个人认为目前面试中一般作为对比使用,不会考具体的细节,毕竟很少有系统还在用1.7

相关推荐
IDRSolutions_CN17 分钟前
PDF 合并测试:性能与内容完整性
java·经验分享·pdf·软件工程·团队开发
TDengine (老段)17 分钟前
TDengine 在新能源领域的价值
java·大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
helloworld工程师19 分钟前
Java实现PDF加水印功能:技术解析与实践指南
java·开发语言·pdf
编程乐学(Arfan开发工程师)37 分钟前
10、底层注解-@Conditional条件装配
java·spring boot·后端·架构
五花肉村长37 分钟前
Linux-进程信号
linux·运维·服务器·开发语言·网络·c++
爬菜1 小时前
包装类(1)
java
带刺的坐椅1 小时前
高德地图 MCP,可用 Java SolonMCP 接入(支持 java8, java11, java17, java21)
java·ai·solon·高德地图·lbs·mcp
AA-代码批发V哥1 小时前
Java-List集合类全面解析
java·开发语言·list
cainiao0806051 小时前
Java大数据机器学习模型在金融衍生品风险建模中的创新实践
java·金融
羚羊角uou1 小时前
【C++】map和multimap的常用接口详解
开发语言·c++