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

在多线程环境下,使用普通变量进行计数容易出现线程安全问题。Java 提供了 AtomicLong 类来解决这个问题,它通过底层的 CAS(Compare-And-Swap)机制保证操作的原子性,无需使用 synchronized 关键字即可实现高效、线程安全的计数。
什么是 AtomicLong
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免费学习笔记(深入)”;
小鸽子助手
一款集成于WPS/Word的智能写作插件
55 查看详情
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 提供了多个原子操作方法,常用的包括:
incrementAndGet():先加 1,再返回新值 getAndIncrement():先返回当前值,再加 1 addAndGet(long delta):加上指定值并返回结果 getAndAdd(long delta):返回当前值后再加指定值 compareAndSet(expected, newValue):如果当前值等于预期值,则更新为新值 get():获取当前值
这些方法都基于 CPU 的原子指令实现,性能优于加锁机制。
基本上就这些。只要涉及共享的计数场景,优先考虑 AtomicLong 能有效避免线程冲突,代码更简洁且效率更高。
以上就是如何在Java中使用AtomicLong实现线程安全计数的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/739921.html
微信扫一扫
支付宝扫一扫