> 文章列表 > ConcurrentHashMap 相关面试题

ConcurrentHashMap 相关面试题

ConcurrentHashMap 相关面试题

1.Hashtable和HashMap、ConcurrentHashMap 之间的区别?

  1. HashMap:线程不安全,key允许为null
  2. HashTable:线程安全,适用synchronized锁HashTable对象,效率较低,key不允许为null
  3. ConcurrentHashMap:线程安全,使用synchronized锁每个链表头结点,锁冲突概率低,充分利用CAS机制,优化了扩容方式,key不允许为null

2.ConcurrentHashMap的读是否需要加锁,为什么?

读操作没有加锁,只对写操作进行加锁。目的是为了进一步降低锁冲突的概率,为了保证读到刚修改的数据,搭配了volatile关键字。

3.介绍一下ConcurrentHashMap的锁分段技术?

目的也是为了降低锁竞争的概率,当两个线程访问的数据恰好在同一个段上的时候,才触发锁竞争。(这个是Java1.7中采取的技术,Java1.8中已经不再使用了,简单的说就是把若干个哈希桶分成一个“段”(Segment),针对每个段分别加锁)

4.ConcurrentHashMap在jdk1.8中做了哪些优化?

  1. 取消了分段锁,直接给每个哈希桶(每个链表)分配了一个锁(就是以每个链表的头结点对象作为锁对象)。
  2. 将原来数组+链表的实现方式改进成数组+链表/红黑树的方式,当链表较长时(大于等于8个元素)就转换成红黑树。