JAVA 中的 CAS

本文介绍了JAVA中的CAS(Casual Atomic Operation)是如何实现的,它依赖于unsafe类和JVM针对不同操作系统的Atomic::cmpxchg实现,该操作使用汇编的CAS指令并通过CPU的lock信号确保原子性。CAS是一种乐观锁,与独占锁(如synchronized)不同,不保证阻塞,而是通过比较并交换值来保证数据一致性。volatile确保内存可见性,但不用于同步,与CAS的使用场景不同。

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

JAVA 中的 CAS

我们总结一下 JAVA 的 cas 是怎么实现的:

  • java 的 cas 利用的的是 unsafe 这个类提供的 cas 操作。
  • unsafe 的cas 依赖了的是 jvm 针对不同的操作系统实现的 Atomic::cmpxchg
  • Atomic::cmpxchg 的实现使用了汇编的 cas 操作,并使用 cpu 硬件提供的 lock信号保证其原子性

https://juejin.im/post/5a75db20f265da4e826320a9

写的很好

 

深入理解JVM之CAS原子操作(九)

独占锁是一种悲观锁,synchronized就是一种独占锁
CAS就是一种乐观锁思想的应用。
volatile并不是用来保证同步的,它的一个最大的最突出的特性就是「内存可见性」
volatile与synchronized关键字不能相提并论,使用场景不同

CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。执行CAS操作的时候,将内存位置的值与预期原值比较,如果相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。

http://zouzls.github.io/2017/01/26/CAS%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值