温馨提示×

温馨提示×

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

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

Java中Atomic操作有哪些

发布时间:2025-10-16 15:10:00 来源:亿速云 阅读:104 作者:小樊 栏目:编程语言

Java中的Atomic原子操作分类及核心实现

Java中的原子操作主要通过java.util.concurrent.atomic包下的类实现,这些类利用**CAS(Compare-And-Swap,比较并交换)**乐观锁机制保证操作的原子性,无需使用synchronized等传统锁,从而提升并发性能。以下是主要的Atomic操作分类及核心类:

一、基本类型原子类

用于原子地更新intlongboolean等基本类型变量,核心类包括:

  • AtomicInteger:原子更新整型变量,提供getAndIncrement()(原子自增并返回旧值)、getAndDecrement()(原子自减并返回旧值)、getAndAdd(int delta)(原子加指定值并返回旧值)、compareAndSet(int expect, int update)(若当前值等于expect则更新为update)等方法。
  • AtomicLong:与AtomicInteger类似,但操作long类型变量。
  • AtomicBoolean:原子更新布尔型变量,提供getAndSet(boolean newValue)(原子设置新值并返回旧值)、compareAndSet(boolean expect, boolean update)(若当前值等于expect则更新为update)等方法。

二、数组类型原子类

用于原子地更新数组中的某个元素,核心类包括:

  • AtomicIntegerArray:原子更新整型数组元素,提供getAndSet(int i, int newValue)(原子设置索引i的元素为newValue并返回旧值)、compareAndSet(int i, int expect, int update)(若索引i的元素等于expect则更新为update)等方法。
  • AtomicLongArray:原子更新长整型数组元素。
  • AtomicReferenceArray:原子更新引用类型数组元素。

三、引用类型原子类

用于原子地更新对象引用,核心类包括:

  • AtomicReference:原子更新引用类型变量,提供getAndSet(V newValue)(原子设置新引用并返回旧引用)、compareAndSet(V expect, V update)(若当前引用等于expect则更新为update)等方法。
  • AtomicStampedReference:带版本号的引用原子类,通过版本号解决CAS的ABA问题(即变量被修改为B后又改回A,传统CAS无法感知)。提供compareAndSet(V expectedReference, V newReference, int expectedStamp, int newStamp)(若当前引用和版本号分别等于预期值,则更新为新的引用和版本号)方法。
  • AtomicMarkableReference:带标记位的引用原子类,用于标记引用是否被修改(如“已取消”),提供compareAndSet(V expectedReference, V newReference, boolean expectedMark, boolean newMark)(若当前引用和标记位分别等于预期值,则更新为新的引用和标记位)方法。

四、字段更新器原子类

用于原子地更新对象的特定字段(需满足volatile修饰、非final等条件),核心类包括:

  • AtomicIntegerFieldUpdater:原子更新int类型字段,通过反射获取字段并执行原子操作,提供getAndIncrement(T obj)(原子递增对象objint字段并返回旧值)、compareAndSet(T obj, int expect, int update)(若对象objint字段等于expect则更新为update)等方法。
  • AtomicLongFieldUpdater:原子更新long类型字段。
  • AtomicReferenceFieldUpdater<T,V>:原子更新引用类型字段。

五、累加器原子类(JDK 1.8新增)

用于高性能的累加操作(如统计总和),核心类包括:

  • LongAdder:原子累加long类型值,通过分段锁机制减少竞争,在高并发场景下性能优于AtomicLong
  • DoubleAdder:原子累加double类型值。
  • LongAccumulator:支持自定义累加函数的long类型累加器(如求最大值、最小值)。
  • DoubleAccumulator:支持自定义累加函数的double类型累加器。

这些Atomic类覆盖了多线程环境下对基本类型、数组、引用类型及对象字段的原子操作需求,是并发编程中实现线程安全的重要工具。

向AI问一下细节

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

AI