Java 原子操作类 Atomic

Java从JDK1.5引入的Atomic包提供了一种简单、高效、线程安全的方式来更新变量。Atomic类大致分为原子更新基本类型、数组、引用和属性四类。虽然能保证读写安全,但无法确保线程安全。其原子性是通过CAS算法实现的,如AtomicInteger的getAndAdd()方法就利用Unsafe类进行底层操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1 Atomic 类

1.1 Atomic 是什么?

Java从JDK1.5 开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。

Atomic包大致可以分为4类

  1. 原子更新基本类型
  2. 原子更新数组
  3. 原子更新引用
  4. 原子更新属性

Atomic只能保证读写安全(读写会加锁),并不能保证线程安全。例如:

如果线程 A 调了 getter,与此同时线程 B 、线程 C 都调了 setter——那最后线程 A get 到的值,有3种可能:可能是 B、C set 之前原始的值,也可能是 B set 的值,也可能是 C set 的值。同时,最终这个属性的值,可能是 B set 的值,也有可能是 C set 的值。所以Atomic并不能保证对象的线程安全。

1.2 具有原子性的原理

底层使用的是CAS算法。

我们以 AtomicInteger 类的 getAndAdd(int delta) ⽅法为例,来看看Java是如 何实现原⼦操作的。

public final int getAndAdd
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值