ConcurrentHashMap

ConcurrentHashMap 是 Java 中的一个并发集合类,属于 java.util.concurrent 包。它是线程安全的 HashMap 实现,允许多个线程高效地并发访问和修改映射数据。

核心特点

特性 说明
线程安全 通过内部分段或锁机制实现并发访问
高性能 允许多个线程同时读写不同的部分,性能远优于 Hashtable
不允许空键或空值 put(null, ...)put(..., null) 都会抛出 NullPointerException
弱一致性迭代器 在迭代过程中,能容忍并发修改,但不保证实时一致性

 

import java.util.concurrent.ConcurrentHashMap;

public class Main {
    public static void main(String[] args) {
        ConcurrentHashMap map = new ConcurrentHashMap<>();

        map.put("apple", 1);
        map.put("banana", 2);

        System.out.println(map.get("apple")); // 输出 1

        map.forEach((key, value) -> System.out.println(key + ": " + value));
    }
}

常用方法

方法 描述
put(K key, V value) 插入键值对
get(Object key) 获取指定键的值
remove(Object key) 移除指定键及其值
containsKey(Object key) 判断是否包含某键
computeIfAbsent 键不存在时计算并插入值
putIfAbsent 仅当键不存在时插入


️ 内部实现机制(JDK 8)

  • JDK 1.7:采用 Segment(分段锁) 机制

  • JDK 1.8:改为使用 CAS + synchronized + 链表/红黑树 + 数组

    • CAS(乐观锁)用于无锁写入

    • 多线程修改时,通过链表同步块控制竞争


✅ 适用场景

  • 多线程环境下需要高效、线程安全的 Map

  • 替代传统的 HashtableCollections.synchronizedMap


注意事项

  • ConcurrentHashMap弱一致性,迭代过程中数据可能改变

  • 不支持 null 键和值

  • 默认并发级别已优化,无需手动设置并发级别

你可能感兴趣的:(java,开发语言)