跳到主要内容

Java ConcurrentMap 接口

提示
  1. 线程安全映射ConcurrentMap 接口提供线程安全的映射,允许多线程同时访问而不影响映射数据的一致性。
  2. ConcurrentHashMap 类的实现:要使用 ConcurrentMap,需通过其实现类 ConcurrentHashMap,一个扩展了 Map 接口的同步映射。
  3. 特殊方法和使用ConcurrentMap 包含 Map 接口的所有方法,并添加特有方法如 putIfAbsentcompute,用于高效并发操作。

Java 集合框架中的 ConcurrentMap 接口提供了一个线程安全的映射。也就是说,多个线程可以同时访问映射而不影响映射中条目的一致性。

ConcurrentMap 被认为是一个同步映射。

它扩展了 Map 接口

实现 ConcurrentMap 的类

由于 ConcurrentMap 是一个接口,我们不能从它创建对象。

为了使用 ConcurrentMap 接口的功能,我们需要使用实现了它的 ConcurrentHashMap 类。

Java ConcurrentHashMap 接口扩展了 Java ConcurrentMap 接口。

如何使用 ConcurrentMap?

要使用 ConcurrentMap,我们首先必须导入 java.util.concurrent.ConcurrentMap 包。一旦导入了包,下面是我们如何创建一个并发映射。

// ConcurrentHashMap 实现 ConcurrentMap
ConcurrentMap<Key, Value> numbers = new ConcurrentHashMap<>();

在上面的代码中,我们创建了一个名为 numbers 的并发映射。

这里,

  • Key - 用于将每个元素(值)与映射中的元素相关联的唯一标识符
  • Value - 映射中由键关联的元素

ConcurrentMap 的方法

ConcurrentMap 接口包含了 Map 接口的所有方法。这是因为 MapConcurrentMap 接口的超级接口。

除了所有这些方法之外,这里是特定于 ConcurrentMap 接口的方法。

  • putIfAbsent() - 如果指定的键尚未与任何值关联,则将指定的键/值插入映射。
  • compute() - 为指定键及其先前映射的值计算一个条目(键/值映射)。
  • computeIfAbsent() - 如果键尚未与任何值映射,则使用指定函数为指定键计算一个值。
  • computeIfPresent() - 如果指定键已经与指定值映射,则为该键计算一个新条目(键/值映射)。
  • forEach() - 访问映射的所有条目并执行指定的操作。
  • merge() - 如果键已映射到某个值,则将新指定的值与旧值合并。如果键尚未映射,则方法简单地将指定的值关联到我们的键。

要了解更多,请访问 Java ConcurrentMap(官方 Java 文档)

ConcurrentHashMap 中的 ConcurrentMap 实现

import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentHashMap;

class Main {

public static void main(String[] args) {
// 使用 ConcurrentHashMap 创建 ConcurrentMap
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 removedValue = numbers.remove("Two");
System.out.println("移除的值: " + removedValue);
}
}

输出

ConcurrentMap: {One=1, Two=2, Three=3}
访问到的值: 1
移除的值: 2

要了解更多关于 ConcurrentHashMap,请访问 Java ConcurrentHashMap