Java ConcurrentHashMap的原理和常见问答题 2022.03.10 周四

1) ConcurrentHashMap 采用了分段锁技术,其中 Segment 继承于 ReentrantLock。不会像 HashTable 那样不管是 put 还是 get 操作都需要做同步处理,理论上 ConcurrentHashMap 支持 CurrencyLevel (Segment 数组数量)的线程并发。每当一个线程占用锁访问一个 Segment 时,不会影响到其他的 Segment

2)ConcurrentHashMap 的 get 方法是非常高效的,因为整个过程都不需要加锁。

3)[java 1.8] java 1.7的 ConcurrentHashMap存在的一个问题:遍历查询链表的效率太低
  java 1.8 修改了底层的结构,抛弃了 1.7 原有的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性


 4) 问题:
   Java 1.8是怎么实现的 ConcurrentHashMap中 1.7存在的 遍历查询链表效率低的问题
     答: 1.8 在 1.7 的数据结构上做了大的改动,采用红黑树之后可以保证查询效率(O(logn)),甚至取消了 ReentrantLock 改为了 synchronized,这样可以看出在新版的 JDK 中对 synchronized 优化是很到位的。

     和 HashMap一样,引入了 链表太长时优化为 红黑树,查询效率从 O(n) 提高到了 O(logn) 

5)常见问答题:
  

谈谈你理解的 HashMap,讲讲其中的 get put 过程。
1.8 做了什么优化?
是线程安全的嘛?
不安全会导致哪些问题?
如何解决?有没有线程安全的并发容器?
ConcurrentHashMap 是如何实现的? 1.7、1.8 实现有何不同?为什么这么做?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值