Java中的原子操作主要通过java.util.concurrent.atomic包下的类实现,这些类利用**CAS(Compare-And-Swap,比较并交换)**乐观锁机制保证操作的原子性,无需使用synchronized等传统锁,从而提升并发性能。以下是主要的Atomic操作分类及核心类:
用于原子地更新int、long、boolean等基本类型变量,核心类包括:
getAndIncrement()(原子自增并返回旧值)、getAndDecrement()(原子自减并返回旧值)、getAndAdd(int delta)(原子加指定值并返回旧值)、compareAndSet(int expect, int update)(若当前值等于expect则更新为update)等方法。AtomicInteger类似,但操作long类型变量。getAndSet(boolean newValue)(原子设置新值并返回旧值)、compareAndSet(boolean expect, boolean update)(若当前值等于expect则更新为update)等方法。用于原子地更新数组中的某个元素,核心类包括:
getAndSet(int i, int newValue)(原子设置索引i的元素为newValue并返回旧值)、compareAndSet(int i, int expect, int update)(若索引i的元素等于expect则更新为update)等方法。用于原子地更新对象引用,核心类包括:
getAndSet(V newValue)(原子设置新引用并返回旧引用)、compareAndSet(V expect, V update)(若当前引用等于expect则更新为update)等方法。compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)(若当前引用和版本号分别等于预期值,则更新为新的引用和版本号)方法。compareAndSet(V expectedReference, V newReference, boolean expectedMark, boolean newMark)(若当前引用和标记位分别等于预期值,则更新为新的引用和标记位)方法。用于原子地更新对象的特定字段(需满足volatile修饰、非final等条件),核心类包括:
int类型字段,通过反射获取字段并执行原子操作,提供getAndIncrement(T obj)(原子递增对象obj的int字段并返回旧值)、compareAndSet(T obj, int expect, int update)(若对象obj的int字段等于expect则更新为update)等方法。long类型字段。用于高性能的累加操作(如统计总和),核心类包括:
long类型值,通过分段锁机制减少竞争,在高并发场景下性能优于AtomicLong。double类型值。long类型累加器(如求最大值、最小值)。double类型累加器。这些Atomic类覆盖了多线程环境下对基本类型、数组、引用类型及对象字段的原子操作需求,是并发编程中实现线程安全的重要工具。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。