CAS(Compare And Swap比较并交换)

CAS(Compare And Swap)是重要的同步机制,包括概念和实现两部分。CAS操作包含内存位置、预期原值和新值,若内存位置值未被其他线程改变则更新。但存在ABA问题和可能导致长时间循环导致CPU开销大。解决方案如AtomicStampedReference和使用锁。CAS通过compareAndSet方法实现,基于CPU的lock cmpxchg指令确保原子性。
摘要由CSDN通过智能技术生成

CAS(Compare And Swap比较并交换)

1.概念

cas非常重要!
CAS 操作包含三个操作数

  • 内存位置(V)
  • 预期原值(A)
  • 新值(B)

CAS 用于同步的方式是从地址 V 读取值 A,执行多步计算来获得新 值 B,然后使用 CAS 将 V 的值从 A 改为 B。如果 V 处的值尚未同时更改,则 CAS 操作成功。

整个J.U.C都是建立在CAS之上的,因此对于synchronized阻塞算法,J.U.C在性能上有了很大的提升。

cas存在的问题:

  • ABA问题

    • 一个线程将共享变量从A改成B再改成A,另一个线程执行cas时会认为共享变量没被修改过.
    • 解决方案:AtomicStampedReference(使用jdk1.5之后的带有时间戳的原子类)
  • 循环时间长,cpu开销大

    • 原因:cas使用for(;; )实现,不会使线程进入休眠状态,cpu会一直空转.
  • 只能保证一个共享变量的原子操作

    • 对多个共享变量操作时,循环CAS就无法保证操作的原子性
    • 解决方法:(1)使用锁 (2)AtomicReference

2.cas实现

do…while实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值