精通 Java ConcurrentMap:线程安全 Map 详解
Java ConcurrentMap 接口
学习 Java ConcurrentMap 如何提供线程安全 Map 操作、核心方法及 ConcurrentHashMap 实战示例。
ConcurrentMap 接口扩展 java.util.Map,提供高并发、线程安全的 Map 实现。它保证多线程可同时执行读、写、更新操作而不破坏 Map 内部状态。
因 ConcurrentMap 是接口,无法直接实例化。最常用实现是 java.util.concurrent.ConcurrentHashMap,提供无锁读取与细粒度锁更新。
实现 ConcurrentMap 的类
虽 ConcurrentMap 本身不可实例化,但可通过其实现创建具体 Map。事实标准是 ConcurrentHashMap,也有 ConcurrentSkipListMap 等用于有序 Map 需求的替代品。

使用 ConcurrentMap
先导入接口:
import java.util.concurrent.ConcurrentMap;
再创建 ConcurrentHashMap 实例:
ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>();
此例中 numbers 为线程安全 Map,每个 String 键对应一个 Integer 值。
关键概念:
- Key — 映射到值的唯一标识符。
- Value — 与键关联的数据。
ConcurrentMap 的关键方法
除标准 Map 操作外,ConcurrentMap 引入多个原子、无锁方法:
- putIfAbsent(K key, V value) — 仅当键不存在时添加键值对。
- compute(K key, BiFunction) — 基于当前值原子性更新指定键的值。
- computeIfAbsent(K key, Function) — 用提供的函数为缺失键生成值。
- computeIfPresent(K key, BiFunction) — 原子性更新现有键的值。
- forEach(BiConsumer) — 对每个条目执行给定动作。
- merge(K key, V value, BiFunction) — 用提供函数合并新值与现有值。
深入参考请见 官方 Java 文档。
配合 ConcurrentHashMap 使用 ConcurrentMap
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentHashMap;
public class Main {
public static void main(String[] args) {
// 创建线程安全 Map
ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>();
// 插入元素
numbers.put("Two", 2);
numbers.put("One", 1);
numbers.put("Three", 3);
System.out.println("ConcurrentMap: " + numbers);
// 获取值
int value = numbers.get("One");
System.out.println("访问的值: " + value);
// 移除键值对
int removed = numbers.remove("Two");
System.out.println("移除的值: " + removed);
}
}
输出
ConcurrentMap: {One=1, Two=2, Three=3}
访问的值: 1
移除的值: 2
进阶用法请参考 ConcurrentHashMap 文档。
java
- 掌握 C# 接口:定义、实现与实战场景全解析
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java super 关键字:高级用法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java Collection 接口:核心概念与常用方法
- 掌握 Java NavigableSet 接口:导航、排序与实战示例
- 掌握 Java Lambda 表达式:从基础到 Stream API 实战
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 9 接口私有方法:增强封装与代码复用
- 掌握 Java 8 Optional:实现空安全代码的实用指南