atomic常用类方法

Java中的java.util.concurrent.atomic包提供了多种原子操作工具类,以下是核心类及其方法:


1. AtomicBoolean

方法‌:

  • get():获取当前值
  • set(boolean newValue):强制设置值
  • compareAndSet(boolean expect, boolean update):CAS操作
  • getAndSet(boolean newValue):原子获取旧值并设置新值
  • lazySet(boolean newValue):最终一致性设置(不保证立即可见)

2. AtomicInteger/AtomicLong

方法‌:

  • get()/intValue():获取当前值
  • set(int newValue):强制设置值
  • compareAndSet(int expect, int update):CAS操作
  • getAndIncrement():原子自增(返回旧值)
  • getAndDecrement():原子自减
  • getAndAdd(int delta):原子加法
  • incrementAndGet():自增并返回新值
  • updateAndGet(IntUnaryOperator updateFunction):函数式更新

‌**3. AtomicReference<V>**‌

方法‌:

  • get():获取引用值
  • set(V newValue):强制设置引用
  • compareAndSet(V expect, V update):CAS操作
  • getAndSet(V newValue):原子交换引用
  • updateAndGet(UnaryOperator<V> updateFunction):函数式更新引用

4. AtomicIntegerArray/AtomicLongArray

方法‌:

  • length():数组长度
  • get(int i):获取下标i的值
  • set(int i, int newValue):设置指定下标值
  • compareAndSet(int i, int expect, int update):CAS操作指定元素
  • getAndIncrement(int i):原子自增数组元素

‌**5. AtomicStampedReference<V>**‌

方法‌:

  • getReference():获取引用值
  • getStamp():获取版本戳
  • compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp):带版本戳的CAS

‌**6. AtomicMarkableReference<V>**‌

方法‌:

  • isMarked():获取标记状态
  • compareAndSet(V expectedReference, V newReference, boolean expectedMark, boolean newMark):带标记位的CAS

‌**7. LongAdder/DoubleAdder(高并发统计场景)**‌

方法‌:

  • add(long x):累加值
  • sum():返回总和(非原子)
  • reset():重置计数器

特点总结‌:

  1. 线程安全‌:所有操作均为原子性
  2. 无锁设计‌:基于CAS实现高性能并发
  3. 内存语义 ‌:遵循volatile的可见性和有序性
  4. 函数式支持 ‌:JDK8+提供updateAndGet等函数式方法

适用于计数器、状态标志、对象引用更新等场景。

相关推荐
IT大白鼠13 小时前
MySQL 分布式集群系列 · 第八篇(收官)——NDB 集群面试高频题 +架构总结与未来演进
分布式·mysql·面试
IT大白鼠13 小时前
MySQL 分布式集群系列 · 第七篇——生产调优实战:NDB 性能、内存、高可用全方位优化
数据库·分布式·mysql
無a伟16 小时前
RabbitMq高级特性:TTL,死信队列,延迟队列
java·分布式·rabbitmq
stark张宇16 小时前
从 Paxos 到 Raft:一文讲透分布式一致性与复制状态机
分布式·后端
kaoa00018 小时前
Linux入门攻坚——89、Hadoop-1-架构及概念
大数据·linux·hadoop·分布式
海宇大数据18 小时前
分布式网格实战:基于海宇柠檬查出险-登记证构建自动化车辆合规网关
运维·人工智能·分布式·自动化
無a伟19 小时前
RabbitMq高级特性:消息确认,持久化,重试机制
java·分布式·rabbitmq
HanhahnaH20 小时前
Spark 任务如何实现幂等?
大数据·分布式·spark
江畔柳前堤2 天前
云原生 × AI 全景图谱:从 Kubernetes 到 Agent 基础设施的一次认知跃迁
人工智能·分布式·gpt·云原生·kubernetes·原型模式·agi
Thomas21432 天前
kafka 存储flink changelog两种方式和形态
分布式·flink·kafka