java之ConCurrentHashMap简介说明

欢喜 Java经验 发布时间:2025-06-06 10:01:28 阅读数:1616 1
下文笔者讲述ConCurrentHashMap简介说明,如下所示

ConCurrentHashMap简介

`ConcurrentHashMap`是
   Java中用于高并发场景下的线程安全哈希表实现
    位于`java.util.concurrent`包中
	 它是`HashMap`线程安全版本
	  相较于`Collections.synchronizedMap()`和`Hashtable`
	  具有更高的并发性能和更好的扩展性

ConCurrentHashMap核心特点

特性 描述
线程安全 支持多线程并发访问而无需外部同步
高并发性能 使用分段锁(JDK 1.7)或
CAS + synchronized(JDK 1.8)机制提升性能
不抛出 `ConcurrentModificationException` 迭代时允许修改结构
键值允许为 null(仅限非并发使用) 在单线程环境下可插入 null 键/值, 但不推荐

内部实现机制演变

JDK 1.7 及之前:分段锁(Segment)
 - 将整个 Map 分成多个 Segment(默认 16 段),
       每个 Segment 相当于一个独立的 HashTable。
 - 写操作只锁定当前 Segment,提高并发度。

JDK1.8 及之后:
    CAS + synchronized + 红黑树优化
  - 使用 `synchronized` 对链表头节点加锁,粒度更细。
  - 引入红黑树(TreeNode),当链表长度超过阈值(默认 8)时转为红黑树,提高查找效率。
  - 使用 `Node` 节点代替 `Entry`,并支持 `volatile` 修饰字段保证可见性。
  - 引入辅助类 `ForwardingNode` 实现扩容时的迁移操作。

常用方法说明

1.基本操作

方法名 功能
[put(K key, V value)] 插入键值对
[get(Object key)] 获取指定键对应的值
[remove(Object key)] 移除指定键
`containsKey(Object key)` 判断是否包含指定键
[size()] 返回键值对数量(注意:
不是实时精确值)

2.并发增强方法(JDK 1.8+)

 
import java.util.concurrent.ConcurrentHashMap;

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

        // 插入数据
        map.put("apple", 10);
        map.put("banana", 20);

        // 获取数据
        System.out.println(map.get("apple")); // 输出 10

        // 并发更新
        map.computeIfPresent("banana", (key, val) -> val + 10); // 30
        map.computeIfAbsent("orange", key -> 5); // 插入 orange=5

        // 遍历输出
        map.forEach((key, value) -> System.out.println(key + ": " + value));

        // 移除元素
        map.remove("apple");
    }
}

ConCurrentHashMap与HashMap/Hashtable对比

方法名 功能
`putIfAbsent(K key, V value)` 如果不存在该键才插入
`computeIfAbsent(K key, Function mappingFunction)` 如果不存在该键,
则计算并插入
`computeIfPresent(K key, BiFunction remappingFunction)` 如果存在该键,
则重新计算值
`merge(K key, V value, BiFunction remappingFunction)` 合并值,
常用于统计
`forEach(BiConsumer action)` 遍历所有键值对(线程安全)
特性 `HashMap` `Hashtable` `ConcurrentHashMap`
线程安全 ✅(方法全同步) ✅(高效并发控制)
允许 null 键/值 ❌(建议避免)
性能 高(非线程安全) 低(粗粒度锁) 高(细粒度锁/CAS)
迭代器行为 fail-fast fail-fast 弱一致性迭代器
扩容策略 单线程扩容 单线程扩容 多线程协助迁移

ConCurrentHashMap适用场景

-高并发读写:
    如缓存系统、计数器、共享状态管理等
-需要线程安全又不想加锁:
    避免阻塞式操作带来的性能瓶颈
-弱一致性要求的迭代:
    迭代过程中允许其他线程修改
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202506/17491753228487.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者