温馨提示×

温馨提示×

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

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

什么是java Atomic原子性特征

发布时间:2026-10-30 16:21:54 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 中,Atomic(原子性)通常指的是 java.util.concurrent.atomic 包下提供的一组原子类,以及它们所体现的原子性特征。

下面从概念、原理、常见类和示例几个方面说明。


一、什么是“原子性”

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

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

在多线程环境中,如果没有原子性保证,就可能出现竞态条件(Race Condition)。

例如:

count++; // 看似一行,实际是 读-改-写 三步

在并发下,多个线程可能同时读到相同的 count,导致结果错误。


二、Java 中的 Atomic 原子类

Java 提供了 java.util.concurrent.atomic 包,用来在不使用锁的情况下保证原子操作。

常见 Atomic 类

类 说明
AtomicInteger 原子整型
AtomicLong 原子长整型
AtomicBoolean 原子布尔
AtomicReference 原子对象引用
AtomicIntegerArray 原子整型数组
AtomicStampedReference 带版本号的原子引用(解决 ABA 问题)

三、Atomic 是如何保证原子性的

1. 基于 CAS(Compare And Swap)

Atomic 类底层依赖 CAS 机制:

CAS(内存地址, 期望值, 新值)
  • 如果当前值 == 期望值 → 更新成功
  • 否则 → 更新失败,重试

示例(简化逻辑):

while (true) {
    int old = value;
    int next = old + 1;
    if (compareAndSet(old, next)) {
        break;
    }
}

2. 硬件支持

CAS 通常由 CPU 指令(如 x86 的 cmpxchg)支持,效率高于 synchronized。


四、AtomicInteger 示例

import java.util.concurrent.atomic.AtomicInteger;

public class Demo {
    private static AtomicInteger count = new AtomicInteger(0);

    public static void main(String[] args) throws InterruptedException {
        Runnable task = () -> {
            for (int i = 0; i < 1000; i++) {
                count.incrementAndGet(); // 原子自增
            }
        };

        Thread t1 = new Thread(task);
        Thread t2 = new Thread(task);

        t1.start();
        t2.start();
        t1.join();
        t2.join();

        System.out.println(count.get()); // 2000
    }
}

✅ 结果始终正确,不会因为并发而出错。


五、Atomic 原子性的特点

✅ 优点

  • 无锁(lock-free)
  • 高性能
  • 避免死锁

❌ 缺点

  • 只能保证单个变量的原子性
  • CAS 失败会自旋,高并发下可能消耗 CPU
  • 不能替代复合操作的同步(如“先判断再更新”的复杂逻辑)

六、Atomic vs synchronized

对比项 Atomic synchronized
粒度 变量级 代码块 / 方法
是否阻塞 否(自旋) 是(阻塞)
性能 高 相对较低
适用场景 简单计数、状态标志 复杂业务操作

七、总结一句话

Java 的 Atomic 原子性特征,是通过 CAS 机制在无锁情况下,保证单个变量的读-改-写操作不可中断、线程安全。

如果你愿意,我也可以讲:

  • Atomic 的 ABA 问题
  • Atomic 在并发框架中的使用
  • 和 volatile 的区别
向AI问一下细节

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

AI
助
手