AtomicLong是Java中用于线程安全计数的类,基于CAS机制实现原子操作。它提供incrementAndGet、getAndIncrement、addAndGet等方法,可在高并发下高效递增或修改long型数值,无需加锁。常用于统计请求次数等共享计数场景,相比synchronized更轻量,避免数据竞争,提升性能且代码简洁。

在多线程环境下,使用普通变量进行计数容易出现线程安全问题。Java 提供了 AtomicLong 类来解决这个问题,它通过底层的 CAS(Compare-And-Swap)机制保证操作的原子性,无需使用 synchronized 关键字即可实现高效、线程安全的计数。
AtomicLong 是 java.util.concurrent.atomic 包中的一个类,用于对 long 类型的值进行原子操作。它提供的 increment、decrement 和 add 等方法都是线程安全的,适合在高并发场景下替代 volatile 配合 synchronized 的方式。
以下是一个简单的例子,展示如何使用 AtomicLong 实现线程安全的计数:
// 创建一个 AtomicLong,初始值为 0
AtomicLong counter = new AtomicLong(0);
// 多个线程中安全地递增
counter.incrementAndGet(); // 返回递增后的值
counter.getAndIncrement(); // 先返回原值,再递增
假设你有一个 Web 服务需要统计请求总数,多个线程同时处理请求,可以这样实现:
立即学习“Java免费学习笔记(深入)”;
public class RequestCounter {
private static final AtomicLong requestCount = new AtomicLong(0);
public static void recordRequest() {
requestCount.incrementAndGet();
}
public static long getCount() {
return requestCount.get();
}
}
每个线程调用 recordRequest() 方法时,计数都会安全递增,不会发生数据竞争。
AtomicLong 提供了多个原子操作方法,常用的包括:
这些方法都基于 CPU 的原子指令实现,性能优于加锁机制。
基本上就这些。只要涉及共享的计数场景,优先考虑 AtomicLong 能有效避免线程冲突,代码更简洁且效率更高。
以上就是如何在Java中使用AtomicLong实现线程安全计数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号