当前位置: 首页 > wzjs >正文

无需域名网站建设本地常州微信网站建设

无需域名网站建设,本地常州微信网站建设,山东mip网站建设,小程序登录功能CAS CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。 CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。 更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同…

CAS

CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。

CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。

更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。

从思想上来说,Synchronized属于悲观锁,悲观地认为程序中的并发情况严重,所以严防死守。CAS属于乐观锁,乐观地认为程序中的并发情况不那么严重,所以让线程不断去尝试更新。

Synchronized关键字会让没有得到锁资源的线程进入BLOCKED状态,而后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统用户模式内核模式的转换,代价比较高。

尽管Java1.6为Synchronized做了优化,增加了从偏向锁轻量级锁再到重量级锁的过度,但是在最终转变为重量级锁之后,性能仍然较低。

Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作

这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关于这个类的方法的解释。总而言之,对于Unsafe类的使用都是受限制的,只有授信的代码才能获得该类的实例,当然JDK库里面的类是可以随意使用的。

实现

CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false

CAS也是通过Unsafe实现的,看下Unsafe下的三个方法:

public final native boolean compareAndSwapObject(Object paramObject1, long paramLong, Object paramObject2, Object paramObject3);
public final native boolean compareAndSwapInt(Object paramObject, long paramLong, int paramInt1, int paramInt2);
public final native boolean compareAndSwapLong(Object paramObject, long paramLong1, long paramLong2, long paramLong3);

例子:

在这里插入图片描述

使用场景

1、原子操作类

所谓原子操作类,指的是java.util.concurrent.atomic包下,一系列以Atomic开头的包装类。例如AtomicBooleanAtomicIntegerAtomicLong。它们分别用于Boolean,Integer,Long类型的原子性操作。

2、Lock类

3、轻量级锁在升级为重量级锁之前会有一个自旋并通过cas获取锁的过程

4、java.util.concurrent包完全建立在CAS之上

缺点

1.CPU开销较大

需要结合自旋使用,在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,循环往复,会给CPU带来很大的压力。

2.不能保证代码块的原子性

CAS机制所保证的只是一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用Synchronized了。

3.ABA问题

这是CAS机制最大的问题所在。

如果一个变量V初次读取的时候是A值,并且在准备赋值的时候检查到它仍然是A值,那我们就能说明它的值没有被其他线程修改过了吗?如果在这段期间它的值曾经被改成了B,然后又改回A,那CAS操作就会误认为它从来没有被修改过。这个漏洞称为CAS操作的"ABA"问题。

java.util.concurrent包为了解决这个问题,提供了一个带有标记的原子引用类"AtomicStampedReference",它可以通过控制变量值的版本来保证CAS的正确性。不过目前来说这个类比较"鸡肋",大部分情况下ABA问题并不会影响程序并发的正确性,如果需要解决ABA问题,使用传统的互斥同步可能回避原子类更加高效。

参考

Unsafe与CAS - 五月的仓颉 - 博客园 (cnblogs.com)

漫画:什么是CAS机制 - 开源最前线 - 博客园 (cnblogs.com)

http://www.dtcms.com/wzjs/540585.html

相关文章:

  • 成都哪家做网站做的好唯品会信息科技有限公司
  • 云空间网站wordpress可以和微信公众号对接
  • 湖南营销网站建设联系方式网站建设采购项目
  • 福州网站建设制作龙之向导外贸官方网站
  • 做网站要不要用jsp建设网站企业网上银行登录入口官方
  • 安远县城乡规划建设局网站三门峡住房和建设局网站
  • 网站首页素材网站建设管理权限
  • seo网站页面f布局线上推广营销策划
  • 百度制作网站wordpress 分类归档
  • 网站在线布局济源做网站的好公司
  • 网站建设需求调查表河南河南省住房和城乡建设厅网站
  • 开封做网站睿艺美设计工作室取什么名字好
  • 高等院校网站建设方案下载软件大全
  • 六安网站帮人做网站在徐州被敲诈五万
  • 计算机网站建设相关的书籍我的手机网站
  • 推广网站的公司新网wordpress域名解析
  • 电子商务网站建设项目的阶段苏州百度快照优化排名
  • 室内设计网站推荐知乎嘉兴有哪些做网站的公司
  • 城乡建设网站人力资源网站建设域名跳转博客
  • 凡科做的是网站吗ps网站参考线怎么做
  • ?]后台的网站可以备案吗互联网相关网站
  • 廊坊智能模板建站直接进网站的浏览器
  • 四川网站seo网站主机空间价格
  • 哪个网站可以接广告做运动分类的网站设计论文
  • 太原网站建设方案报价房产门户网站平台搭建
  • 太平洋在线企业建站系统北京大学 讣告
  • 传奇新开网站服html to wordpress
  • dw可以做移动端网站wordpress更新很慢
  • 宜兴城乡建设局网站怎么做纪念网站
  • 桂阳网站制作设计门户网