import java.util.concurrent.ConcurrentHashMap;
public class ThreadSafeMapExample {
public static void main(String[] args) {
// 创建一个线程安全的Map
ConcurrentHashMap<String, Integer> threadSafeMap = new ConcurrentHashMap<>();
// 添加键值对
threadSafeMap.put("Apple", 1);
threadSafeMap.put("Banana", 2);
threadSafeMap.put("Orange", 3);
// 获取值
System.out.println("Value for Apple: " + threadSafeMap.get("Apple"));
// 使用computeIfAbsent方法,线程安全地计算并添加新值
threadSafeMap.computeIfAbsent("Grape", key -> 4);
System.out.println("Value for Grape: " + threadSafeMap.get("Grape"));
// 遍历Map
threadSafeMap.forEach((key, value) -> {
System.out.println("Key: " + key + ", Value: " + value);
});
}
}
ConcurrentHashMap:ConcurrentHashMap
是 Java 提供的一个线程安全的 Map
实现。它在多线程环境下比 synchronized
包装的 HashMap
更高效,因为它使用了分段锁(Segment)机制,允许多个线程同时读写不同的部分。
put 方法:用于向 ConcurrentHashMap
中添加键值对。它是线程安全的,多个线程可以同时调用 put
方法而不会导致数据不一致。
get 方法:用于获取指定键对应的值。同样也是线程安全的。
computeIfAbsent 方法:这是一个非常有用的原子操作方法,当指定的键不存在时,它会根据提供的映射函数计算并插入新的值。这个过程是线程安全的,避免了显式的同步代码。
forEach 方法:用于遍历 ConcurrentHashMap
中的所有键值对。遍历过程中即使有其他线程修改了 Map
,也不会抛出 ConcurrentModificationException
,而是保证可见性。
通过这些特性,ConcurrentHashMap
提供了高效的线程安全性,适用于高并发场景下的键值对存储和访问。
上一篇:java判断int类型不为空
下一篇:java 邮件发送
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站