当前位置: 首页 > news >正文

Java线程安全计数器实现方案

Java怎么实现一个线程安全的计数器?以下是实现线程安全计数器的几种常见方法,根据场景选择最优方案:


方法1:使用 AtomicLong(推荐轻量级场景)

import java.util.concurrent.atomic.AtomicLong;public class AtomicCounter {private final AtomicLong count = new AtomicLong(0);public void increment() {count.incrementAndGet(); // 原子性+1}public long get() {return count.get();}
}

特点

  • 基于CAS(Compare-And-Swap)实现,无锁竞争,高性能
  • 适合低/中并发场景(如QPS <10万)

方法2:synchronized 关键字

public class SynchronizedCounter {private long count = 0;public synchronized void increment() {count++; // 同步块保证原子性}public synchronized long get() {return count;}
}

特点

  • 简单直接,但锁粒度粗,高并发时性能下降
  • 适合代码维护性优先的场景

方法3:LongAdder(推荐高并发场景)

import java.util.concurrent.atomic.LongAdder;public class LongAdderCounter {private final LongAdder count = new LongAdder();public void increment() {count.increment(); // 分段CAS降低竞争}public long get() {return count.sum();}
}

特点

  • JDK8+ 引入,分段累加避免CAS自旋,吞吐量极高
  • 适合超高并发计数(如秒杀系统计数器)

方法4:ReentrantLock(需灵活控制时)

import java.util.concurrent.locks.ReentrantLock;public class LockCounter {private long count = 0;private final ReentrantLock lock = new ReentrantLock();public void increment() {lock.lock();try {count++;} finally {lock.unlock(); // 必须finally释放锁}}
}

特点

  • synchronized 更灵活(可尝试锁、可中断等)
  • 适合需要复杂锁控制的场景

性能对比(参考基准测试)

实现方式10线程/100万次操作耗时适用场景
AtomicLong~120ms通用场景
LongAdder~50ms超高并发写入
synchronized~600ms低并发或遗留系统
ReentrantLock~300ms需要锁高级功能时

选型建议

  • 优先选 LongAdder(JDK8+)或 AtomicLong
  • 需要阻塞控制时再用 ReentrantLock
  • 传统项目可用 synchronized 简化代码

相关文章:

  • tcp, udp , 与 select .
  • pycharm2020.2版本给项目选择了虚拟环境解释器,项目文件都运行正常,为什么terminal文件路径的前面没有虚拟解释器的名称
  • http的缓存问题
  • 0到1案例演示 vue + axios 请求 springboot 的 restful 风格接口(前后端分离+跨域问题)
  • Zookeeper 3.8.4 安装部署帮助手册
  • CTF题目:Apache Flink目录遍历漏洞实战及CVE-2020-17519漏洞分析
  • HTML+CSS 实现注册登录切换效果
  • PC 基准测试工具 3D Mark 登陆 macOS
  • 14.vue.js的watch()的注意事项(1)
  • 使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验
  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 痉挛性斜颈:认识颈部的 “异常挛动”
  • 基于深度学习的智能图像分类系统:从零开始构建
  • 深度学习中的激活函数:PyTorch中的ReLU及其应用
  • 【Linux】初见,进程概念
  • React 性能优化实战指南:从理论到实践的完整攻略
  • 【项目实训#07】HarmonyOS API知识图谱构建与系统知识图谱后端实现
  • 固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级
  • Linux 线程深度解析:从内存管理到线程控制的核心机制
  • 替换一个数字后的最大差值
  • 溧阳网站优化/2022搜索引擎
  • 办公家具网站模版/中国足彩网竞彩推荐
  • 万维建设网站/成人短期培训学校
  • 网站开发可以自学吗/客源引流推广
  • 哪个网站可以做销售记录仪/今日头条武汉最新消息
  • 一个小网站一般多少钱/今天国际新闻大事