cas基础

一、什么是cas

目录

一、什么是cas


  1.  cas(compare-and-swap):简单翻译为比较并交换

功能:

判断内存某个位置的值是否为预期值,如果则更新为新的值,这个过程是原子的

cas是一条CPU并发原语,简单来说,cas是一条由CPU直接识别并执行的语句指令,用于对内存空间进行直接的管理。

cas并发原语体现在JAVA语言中Unsafe类的各个方法。原语是操作系统语言范畴,是由若干条指令组成,用于完成某一项特定的功能。暂且可以将CAS理解为一个黑盒,黑盒中存储许多指令,我们只需要调用黑盒,就可以直接对内存进行完整的操作。

cas的目的,结合JUC直接对内存进行操作管理。

    2.  Unsafe类:


是 CAS 的核心类,由于 Java 方法无法直接访问底层系统,需要通过本地( native )方法来访问, Unsafe 相当于一个后门,基于该类可以直接操作特定内存的数据。 

Unsafe 类存在于 sun . misc 包中,其内部方法操作可以像 C 的指针一样直接操作内存,因为 Java 中 CAS 操作的执行依赖于 Unsafe 类 方法。


注意 Unsafe 类中的所有方法都是 native 修饰的,也就是说 Unsafe 类中的方法都直接调川操作系统底层资源执行相应任务。

变量 valueOffset ,表示该变量值在内存中的偏移地址,因为 Unsafe 就是根据内存偏移地址获取数据的


变量 value 用 volatile 修饰,保证了多线程之间的内存可见性。
 

public final int getAndIncrement(){
     return unsafe.getAndAddInt(this,valueoffset,1);
}

总结:

CAS :比较当前工作内存中的值和主内存中的值,如果相同则执行规定操作,否则继续比较直到主内存和工作内存中的值一致为止.


CAS 应用  :CAS 有3个操作数,内存值 V ,旧的预期值 A ,要修改的更新值 B 。当且仅当预期值 A 和内存值 V 相同时,将内存值 V 修改为 B ,否则什么都不做
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值