首页 > Java > java教程 > 正文

在Java中如何使用ConcurrentHashMap实现高并发计数

P粉602998670
发布: 2025-10-28 23:14:02
原创
543人浏览过
使用ConcurrentHashMap结合compute或merge方法可实现线程安全的并发计数,普通场景推荐merge简化逻辑,高频更新场景建议搭配LongAdder以降低CAS竞争,提升性能。

在java中如何使用concurrenthashmap实现高并发计数

在高并发场景下,使用普通的HashMap或synchronized关键字实现计数容易引发线程安全问题或性能瓶颈。Java中的ConcurrentHashMap结合原子操作,是实现高效并发计数的理想选择。

使用ConcurrentHashMap配合putIfAbsent和compute实现线程安全计数

ConcurrentHashMap本身不提供原子递增操作,但可以通过其提供的原子性方法如computemergeputIfAbsent来实现安全的计数逻辑。

以下是一个基于compute方法实现的并发计数器示例:

import java.util.concurrent.ConcurrentHashMap;

public class ConcurrentCounter {
    private final ConcurrentHashMap<String, Long> counter = new ConcurrentHashMap<>();

    public void increment(String key) {
        counter.compute(key, (k, oldValue) -> oldValue == null ? 1L : oldValue + 1);
    }

    public long get(String key) {
        return counter.getOrDefault(key, 0L);
    }
}
登录后复制

在这个例子中,compute方法保证了读-改-写操作的原子性,多个线程同时调用increment不会导致数据错乱。

立即学习Java免费学习笔记(深入)”;

使用merge方法简化计数逻辑

ConcurrentHashMap的merge方法更适合计数场景,它能更简洁地实现相同功能:

腾讯智影-AI数字人
腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

腾讯智影-AI数字人 73
查看详情 腾讯智影-AI数字人
public void increment(String key) {
    counter.merge(key, 1L, Long::sum);
}
登录后复制

这行代码表示:如果key不存在,插入值为1;如果已存在,则将原值与1相加后更新。整个操作是线程安全的。

应对更高性能需求:结合LongAdder

当计数频率极高时,多个线程频繁更新同一个key可能导致CAS竞争激烈。可以将value类型换成LongAdder,它专为高并发累加设计:

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.LongAdder;

public class HighPerformanceCounter {
    private final ConcurrentHashMap<String, LongAdder> counter 
        = new ConcurrentHashMap<>();

    public void increment(String key) {
        counter.computeIfAbsent(key, k -> new LongAdder()).increment();
    }

    public long get(String key) {
        LongAdder adder = counter.get(key);
        return adder == null ? 0L : adder.sum();
    }
}
登录后复制

LongAdder通过分段累加降低多线程冲突,读取时再汇总各段结果,在写多读少的场景下性能显著优于AtomicLong。

基本上就这些。根据实际并发强度选择合适的方式:普通场景用merge即可,超高频更新建议搭配LongAdder。ConcurrentHashMap的分段锁机制加上这些原子操作,足以支撑大多数高并发计数需求。

以上就是在Java中如何使用ConcurrentHashMap实现高并发计数的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号