在 Java 中,Atomic 原子类(如 AtomicInteger、AtomicLong、AtomicReference 等) 主要用来在多线程环境下安全地操作共享变量,它的优势主要体现在以下几个方面:
Atomic 类通过 CAS(Compare And Swap,比较并交换) 实现原子操作,避免多线程下的竞态条件。
示例问题(非原子):
int count = 0;
count++; // 实际是 读-改-写,多线程不安全
使用 Atomic:
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet(); // 原子自增
✅ 不需要 synchronized 也能保证线程安全
synchronized:线程竞争时会加锁 / 阻塞Atomic:基于 CPU 级 CAS 指令,通常无锁| 对比项 | synchronized | Atomic |
|---|---|---|
| 是否阻塞 | 可能阻塞 | 通常自旋 |
| 适用场景 | 代码块 / 方法 | 单一变量 |
| 性能 | 低并发好 | 高并发更好 |
✅ 在简单变量操作 + 高并发时性能优势明显
Atomic 不使用锁,因此:
✅ 更适合细粒度并发控制
Atomic 提供了直观的原子方法:
get()
set()
incrementAndGet()
compareAndSet(expect, update)
✅ 比手写 volatile + synchronized 更安全、更易读
Atomic 内部使用:
volatile:保证可见性✅ 同时解决两大并发问题
典型应用:
Atomic 并非“万能”:
synchronized / LockAtomic 原子类的优势是:无锁、原子、高性能,适合多线程下对单个变量的安全操作。
如果你愿意,我也可以帮你对比 Atomic vs synchronized vs Lock 的使用场景,或画个并发模型图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。