Java Atomic 原子类介绍
什么是 Atomic?
Atomic 翻译成中文是“原子”。在化学上,原子是构成物质的最小单位,不可分割。在编程中,Atomic 表示一个操作具有原子性,即该操作不可分割、不可中断。在多线程环境中,操作要么完全执行完毕,要么完全未执行,不会被其他线程看到中间状态。
原子类 是具有原子性操作特性的类。
Java 提供了 java.util.concurrent.atomic
包,其中的原子类利用 CAS(Compare-And-Swap,比较并交换) 乐观锁机制来实现线程安全的操作,而无需使用传统的锁(如 synchronized
或 ReentrantLock
)。
JUC 原子类概览
根据操作的数据类型,JUC 包中的原子类分为四类:
1. 基本类型
原子更新基本类型:
- AtomicInteger:整型原子类
- AtomicLong:长整型原子类
- AtomicBoolean:布尔型原子类
2. 数组类型
原子更新数组中的元素:
- AtomicIntegerArray:整型数组原子类
- AtomicLongArray:长整型数组原子类
- AtomicReferenceArray:引用类型数组原子类
3. 引用类型
原子更新引用类型:
- AtomicReference:引用类型原子类
- AtomicMarkableReference:带标记的引用类型,结合 boolean 标记解决 CAS 可能引发的 ABA 问题。
- AtomicStampedReference:带版本号的引用类型,解决 ABA 问题。
4. 对象属性更新类型
原子更新对象的某些属性:
- AtomicIntegerFieldUpdater:更新整型字段
- AtomicLongFieldUpdater:更新长整型字段
- AtomicReferenceFieldUpdater:更新引用类型字段
基本类型原子类
常用方法
以 AtomicInteger
为例,介绍常用方法:
输出:
数组类型原子类
常用方法
以 AtomicIntegerArray
为例,介绍常用方法:
输出:
引用类型原子类
1. AtomicReference
2. AtomicStampedReference
对象属性修改类型原子类
以 AtomicIntegerFieldUpdater
为例:
输出:
总结
Java 中的 Atomic 类提供了一种轻量级的线程安全方案,避免了锁带来的性能开销。根据实际需求,选择合适的原子类可以提高多线程程序的效率。
评论区