网红营销网站,广西建设网桂建云官网,微信小程序网站建设方案,网站推广费用1. JDK1.7和JDK1.8中ConCurrentHashMap的实现有什么不同#xff1f;
JDK1.7中的实现可以认为是大数组套小数组#xff0c;大数组是Segment数组#xff0c;小数组是HashEntry数组#xff0c;锁是锁在大数组的元素上#xff08;Segment#xff09;#xff0c;力度比较大
JDK1.7中的实现可以认为是大数组套小数组大数组是Segment数组小数组是HashEntry数组锁是锁在大数组的元素上Segment力度比较大原理如下 这是一种分段锁或者叫做分片锁的实现。 JDK1.8中 2. 1.7和1.8中的ConCurrentHashMap怎么保证的线程安全
1.7中通过给Segment加ReentrantLock锁来实现线程安全。
在线程安全方面如果存储元素的计算结果为空会使用CAS来设置该节点如果不为空就会使用synchronized加锁来实现遍历桶中的元素替换或者新增元素到桶中最后判断是否需要转为红黑树链表长度大于8并且数组的长度大于64的时候链表升级为红黑树的结构整个过程相当于只对头结点进行了加锁比Segment加锁力度更小发生加锁和hash冲突的频率也更低了并发场景下性能更高因为使用了红黑树数据量比较大的时候查询性能更好
关于1.8中的一些核心方法可以查看我的另一篇关于源码分析的文章ConCurrentHashMap源码分析_鱼跃鹰飞的博客-CSDN博客1.7个人认为目前面试中一般作为对比使用不会考具体的细节毕竟很少有系统还在用1.7