MST

星途 面试题库

面试题:Java中如何初步优化Hashtable以应对高并发场景

在Java中,Hashtable在高并发场景下性能会下降。请简述一种初步优化Hashtable以适应高并发场景的策略,并说明其原理。
29.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

策略

可以使用 ConcurrentHashMap 来替代 Hashtable

原理

  1. 锁的粒度
    • Hashtable 对整个哈希表加锁,在高并发场景下,当一个线程访问 Hashtable 的任何方法时,其他线程都必须等待锁的释放,这大大降低了并发性能。
    • ConcurrentHashMap 采用分段锁(JDK1.7 及之前)或 CAS 操作 + synchronized 锁部分节点(JDK1.8 之后)的机制。在 JDK1.7 中,它将哈希表分成多个段(Segment),每个段都有自己独立的锁。不同线程可以同时访问不同段的数据,只有在访问同一分段的数据时才需要竞争锁,从而提高了并发性能。在 JDK1.8 中,放弃了分段锁机制,采用 CAS 操作来更新哈希表的一些操作,并对链表或红黑树的头节点使用 synchronized 锁,进一步减少了锁的粒度,提升了并发性能。
  2. 读操作优化
    • Hashtable 的读操作也需要获取锁,这增加了线程等待时间。
    • ConcurrentHashMap 在 JDK1.7 中读操作大部分时候不需要加锁,因为数据结构中的共享变量使用 volatile 修饰,保证了可见性,所以读操作可以直接读取数据而不需要获取锁。在 JDK1.8 中,读操作基于 CAS 等无锁操作,进一步提升了读性能,使得读操作可以与写操作更好地并发执行。