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

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习