Java ConcurrentMap 接口

ConcurrentMap 是一个线程安全且保证原子操作的 Map。在本教程中,我们将了解 Java ConcurrentMap 接口及其方法。

在本教程中,我们将了解 Java ConcurrentMap 接口及其方法。

ConcurrentMap 定义了一个线程安全且保证原子操作的 Map。也就是说,多个线程可以同时访问 ConcurrentMap ,而不会影响 Map 中条目的一致性。

ConcurrentMap 扩展了 Map 接口,是一个适用于多线程并发环境的 Map。

通常情况下,ConcurrentMap 的使用方法和 Map 接口并没有太大区别,只是它的实现类保证了线程安全和操作的原子性。

如何使用 ConcurrentMap ?

ConcurrentMap 是一个接口,ConcurrentHashMap 是它的实现类,他们都位于 java.util.concurrent 包中,这个包中的类和接口都是适用于多线程并发环境的。

CocurrentMap<Key, Value> numbers = new ConcurrentHashMap<>();

这里,

  • Key - Map 中键的数据类型
  • Value - Map 中值的数据类型

ConcurrentMap 的方法

ConcurrentMap 接口继承了 Map 的接口,就包含了 Map 接口中的所有方法。

除此之外, ConcurrentMap 还定义或覆盖了一些自有的方法:

  • putIfAbsent() - 如果指定的健不存在,则插入指定的简直对条目,并返回键的值;如果指定的键存在,直接返回键的值。
  • compute(): 根据指定的键计算新值,并更新到条目。
  • computeIfAbsent(): 当指定键不存在或对应的值为 null 时,根据键计算新值,并更新。
  • computeIfPresent(): 当指定键不存在且对应的值不为 null 时,重新根据键计算新值并更新。
  • forEach() - 对 Map 中的每个条目都执行指定的操作。
  • merge() - 将指定键的条目中的值与新指定的值通过指定的接口函数合并,并更新为合并后的值。如果指定的键不存在或者对应的值为 null,则更新为新指定的值。

ConcurrentMap 示例

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

public class Main {

  public static void main(String[] args) {
    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("Accessed Value: " + value);

    int removedValue = numbers.remove("Two");
    System.out.println("Removed Value: " + removedValue);
  }
}

输出

ConcurrentMap: {One=1, Two=2, Three=3}
Accessed Value: 1
Removed Value: 2

要了解 ConcurrentHashMap 的更多信息,请访问 Java ConcurrentHashMap 章节。