并发下的Map常见面试题

  1.  HashMap 和 HashTable 有什么区别?
  2. java中的另一个线程安全的与HashMap极其类似的类是什么?同样是线程安全,它与HashTable在线程同步上有什么不同?
  3. HashMap 与 ConcurrentHashMap的区别?
  4. 为什么 ConcurrentHashMap 比 HashTable效率高?
  5. 针对 ConcurrentHashMap 锁机制具体分析(JDK1.7 vs JDK1.8)?
  6. ConcurrentHashMap 在1.8中,为什么要使用内置锁 synchronized 来代替重入锁 ReetrantLock?
  7. ConcurrentHashMap 简单介绍?
  8. ConcurrentHashMap 的并发度是多少?

1. 答:(1)HashMap 是线程不安全的,HashTable 是线程安全的。

(2)由于线程安全,所以HashTable 效率比不上 HashMap。

(3)HashMap 最多只允许一条记录的键为null,允许多条记录的值为null,而HashTable不允许。

(4)HashMap 的默许初始化数组的大小是16,HashTable 是11,前者扩容时扩大两倍,后者扩大两倍+1;

(5)HashMap 需要重新计算hash值,而HashTable 直接使用对象的hashCode.

2. 答:ConcurrentHashMap类。HashTable 是使用synchronized关键字加锁的原理(就是对对象加锁);而针对ConcurrentHashMap,在JDK1.7中采用分段锁的方式,在JDK1.8中直接采用了CAS(无锁算法)+synchronized,也采用分段锁的方式并大大缩小了锁的粒度。

3. 答:除了加锁,原理上没有太大的区别。另外,HashMap 的键值允许为null,但是ConcurrentHashMap 都不允许。

4. 答:HashTable使用一把锁(锁住整个链表结构)处理并发问题,多个线程竞争一把锁,容易阻塞。ConcurrentHashMap在1.7中使用分段锁(ReentrantLock + segment + HashEntry),相当于把一个HashMap分成多个段,每段都分一把锁,这样支持多线程访问。锁粒度:基于segment,包含多个HashEntry。在1.8中使用CAS+synchronized+Node+红黑树。锁力度:Node。锁力度降低了。

5. 答:

并发下的Map常见面试题_第1张图片

6. 答:

并发下的Map常见面试题_第2张图片 

7. 答:

并发下的Map常见面试题_第3张图片并发下的Map常见面试题_第4张图片

8.  答:

​​​​​​​并发下的Map常见面试题_第5张图片

你可能感兴趣的:(java,数据结构)