温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样理解java Atomic原子性

发布时间:2026-10-30 15:51:53 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,Atomic(原子性)通常和 java.util.concurrent.atomic 包以及多线程并发安全有关。可以从“什么是原子性”“为什么需要 Atomic”“Atomic 是怎么做到的”“常见类与使用场景”几个层面来理解。


一、什么是“原子性”

**原子性(Atomicity)**指的是:

一个操作要么全部执行成功,要么完全不执行,不会被线程调度机制打断。

在并发场景中,原子性意味着:

  • 多个线程同时操作时
  • 不会出现“中间状态被其他线程看到”的情况

非原子操作的例子

i++;

表面上是一行代码,实际上包含三步:

  1. 读取 i
  2. 计算 i + 1
  3. 写回 i

如果多个线程同时执行,可能会出现:

  • 线程 A 读到 0
  • 线程 B 读到 0
  • 两个线程都写回 1
  • 最终结果少加一次

二、为什么需要 Atomic 类

在多线程中,如果只用:

volatile int count = 0;

volatile 只能保证可见性,不能保证原子性。

所以要解决“计数、状态更新”这类问题,有两种方式:

1. 使用 synchronized(悲观锁)

synchronized(this) {
    count++;
}
  • 安全
  • 但性能开销大

2. 使用 Atomic 类(乐观锁 / CAS)

AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();
  • 无锁
  • 高性能
  • 保证原子性

三、Atomic 是如何保证原子性的(核心:CAS)

Atomic 类底层依赖 CAS(Compare And Swap,比较并交换)

CAS 的思想

期望值 == 当前值 ?
  是 → 更新为新值
  否 → 重试

以 AtomicInteger.incrementAndGet() 为例:

  1. 读取当前值 old
  2. 计算 new = old + 1
  3. CAS(内存值, old, new)
    • 如果内存值还是 old,更新成功
    • 否则重新尝试

这是一种自旋 + 无锁的机制。


四、常见的 Atomic 类

1. 基本类型原子类

AtomicInteger
AtomicLong
AtomicBoolean

常用方法:

get()
set()
incrementAndGet()
decrementAndGet()
compareAndSet(expect, update)

2. 引用类型原子类

AtomicReference<T>

用于原子更新对象引用。

3. 数组原子类

AtomicIntegerArray

对数组中的元素进行原子操作。

4. 字段原子更新

AtomicIntegerFieldUpdater

对普通类的 volatile 字段做原子更新(较少用)。

5. JDK 8+ 增强类

LongAdder
DoubleAdder

在高并发计数场景下,比 AtomicLong 性能更好。


五、Atomic 一定能保证线程安全吗?

不一定。

能保证的:

  • 单个变量的原子更新
  • 可见性 + 原子性

不能保证的:

  • 多个变量之间的复合原子性

例如:

if (atomicA.get() > 0) {
    atomicB.incrementAndGet();
}

这两步不是原子操作。


六、Atomic vs synchronized 对比

特性 Atomic synchronized
是否加锁 否(CAS) 是
性能 高 较低
适用场景 单一变量 代码块/多变量
是否阻塞 否 可能阻塞

七、一句话总结

Java 的 Atomic 原子性,是通过 CAS 机制,在无锁的情况下,保证单个变量的读-改-写操作不会被线程打断。

如果你愿意,我可以:

  • 用 图解方式讲 CAS
  • 对比 AtomicInteger vs synchronized 性能
  • 结合 面试角度总结 Atomic 考点
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手