Android架构师必备技能 | 并发编程之操作 CAS

CAS 的原理

CAS 全称是 compare and swap (比较并且交换),是一种用于在多线程环境下实现同步功能的机制,其也是无锁优化,或者叫自旋,还有自适应自旋。

在 jdk 中,CAS 加 volatile 关键字作为实现并发包的基石。没有 CAS 就不会有并发包,java.util.concurrent 中借助了 CAS 指令实现了一种区别于 synchronized 的一种乐观锁。

乐观锁的一种典型实现机制(CAS):

乐观锁主要就是两个步骤:

  • 冲突检测
  • 数据更新

当多个线程尝试使用 CAS 同时更新同一个变量时,只有一个线程可以更新变量的值,其他的线程都会失败,失败的线程并不会挂起,而是告知这次竞争中失败了,并可以再次尝试。

在不使用锁的情况下保证线程安全,CAS实现机制中有重要的三个操作数

  • 需要读写的内存位置(V)
  • 预期原值(A)
  • 新值(B)

首先先读取需要读写的内存位置 (V),然后比较需要读写的内存位置 (V) 和预期原值 (A),如果内存位置与预期原值的 A 相匹配,那么将内存位置的值更新为新值B。如果内存位置与预期原值的值不匹配,那么处理器不会做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该位置的值。

具体可以分成三个步骤:

  • 读取(需要读写的内存位置(V)&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值