首页 > 试题广场 >

以下关于Java的HashMap和ConcurrentHas

[不定项选择题]
以下关于Java的HashMap和ConcurrentHashMap在Java 8中的实现区别,哪些是正确的?
  • HashMap允许null key和null value,ConcurrentHashMap不允许null key和null value
  • ConcurrentHashMap使用CAS + synchronized实现线程安全,放弃了分段锁
  • 两者都在链表长度超过阈值时将链表转为红黑树
  • HashMap在多线程环境下可能导致死循环(Java 7及之前的头插法)

ConcurrentHashMap如何保证线程安全?
JDK7: 分段锁(Segment)
一个大 Map拆成多个小 Map(Segment)
修改时锁的是一段(Segment),不是整个表

JDK 8:CAS + synchronized
先尝试 CAS 插入
如果失败使用 synchronized

ConcurrentHashMap为什么允许null?
答:考虑并发场景

// 线程A
map.put("key", null);
// 线程B
map.remove("key");

如果此时

// 线程C
map.get("key") == null

无法区分是 key 不存在还是 value 本身为 null。

编辑于 2026-04-10 14:29:28 回复(0)