首页 > 编程语言 >java中CAS是什么?原理是什么?CAS有什么缺点

java中CAS是什么?原理是什么?CAS有什么缺点

时间:2023-09-06 23:02:40浏览次数:37  
标签:标志 ABA java CAS 什么 更新 缺点 操作

什么是CAS?

CAS叫做CompareAndSwap,比较并交换,主要是通过处理器的指令来保证操作的原子性。

CAS的原理是什么?

CAS包含三个操作数:

1.   变量内存地址,V表示

2.   旧的预期值,A表示

3.   准备设置的新值,B表示

当执行CAS指令时,只有当V等于A时,才会用B去更新V的值,否则就不会执行更新操作。

CAS的缺点

CAS的缺点主要有3点:

ABA问题:ABA的问题指的是在CAS更新的过程中,当读取到的值是A,然后准备赋值的时候仍然是 A,但是实际上有可能A的值被改成了B,然后又被改回了A,这个CAS更新的漏洞就叫做ABA。只是 ABA的问题大部分场景下都不影响并发的最终效果。

Java中有AtomicStampedReference来解决这个问题,他加入了预期标志和更新后标志两个字段,更新时不光检查值,还要检查当前的标志是否等于预期标志,全部相等的话才会更新。

循环时间长开销大:自旋CAS的方式如果长时间不成功,会给CPU带来很大的开销。

只能保证一个共享变量的原子操作:只对一个共享变量操作可以保证原子性,但是多个则不行,多个可以通过AtomicReference来处理或者使用锁synchronized实现。

标签:标志,ABA,java,CAS,什么,更新,缺点,操作
From: https://blog.51cto.com/u_16244372/7391372

相关文章

  • 什么是对象存储,在哪些应用场景使用
    对象存储是一种专门用于存储非结构化数据的技术,如文本、图像、视频、音频等。它适用于多种应用场景,如互联网应用、媒体处理、备份和归档等。在互联网应用中,对象存储可用来存储用户数据、日志、图片、视频等非结构化数据。由于对象存储具有高扩展性和高可用性,可以轻松应对大量数据......
  • JAVA学习路线
    学习Java基础知识是成为一名Java开发者的重要第一步。以下是一些建议的资源和一个大致的学习时间安排:学习资源:官方文档和教程:Java的官方网站(Oracle或OpenJDK)提供了丰富的文档和教程,包括JavaSE教程。这些资源是学习Java的很好起点。在线课程:有许多免费和付费的在线课程,如Co......
  • java的List调用toString以后去除两端[]括号
    原始代码:List<Integer>vids=newArrayList<>();if(planList!=null&&planList.size()>0){for(inti=0;i<planList.size();i++){VoicePlanListEntityvoicePlanListEntity=newVoi......
  • Java中有哪些方式能实现锁某个变量
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top首发博客地址系列文章地址在Java中,有几种方式可以实现对某个变量的锁定:使用synchronized关键字:synchronized关键字是Java中最常用的实现锁的方式之一。通过在方法或代码块......
  • 什么是 Redis?
    Redis(RemoteDictionaryServer)是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是Redis的......
  • 《Java编程思想第四版》学习笔记25
    若调用了break和continue语句,finally语句也会得以执行。请注意,与作上标签的break和continue一道,finally排除了Java对goto跳转语句的需求。                                       ......
  • 《Java编程思想第四版》学习笔记24
    //:FinallyWorks.java//ThefinallyclauseisalwaysexecutedpublicclassFinallyWorks{staticintcount=0;publicstaticvoidmain(String[]args){while(true){try{//post-incrementiszerofirsttime:......
  • 无涯教程-JavaScript - WEEKDAY函数
    描述WEEKDAY函数返回与日期相对应的星期几。缺省情况下,日期以整数形式给出,范围从1(星期日)到7(星期六)语法WEEKDAY(serial_number,[return_type])争论Argument描述Required/OptionalSerial_number一个序号,代表您要查找的日期。应该使用DATE函数或其他公式或函......
  • 无涯教程-JavaScript - TODAY函数
    描述TODAY函数返回当前日期的序列号。序列号是Excel用于日期和时间计算的日期时间代码。如果在输入函数之前单元格格式为"常规",Excel会将单元格格式更改为"日期"。如果要查看序列号,必须将单元格格式更改为"常规"或"数字"。语法TODAY()争论TODAYFunction语法没有参数。......
  • 使用JavaScript计算两点经纬度之间的弧线点经纬度数组
    前言地球是一个近似于椭球体的三维物体,因此在计算两个经纬度点之间的距离时,不能简单地将其视为平面上的直线距离。相反,我们需要考虑地球的曲率,并使用球面三角法来计算两点之间的弧线距离及其中的插值点。通过本篇博客,我们将使用JavaScript来实现根据两个经纬度点返回两点之间的弧......