首页 > 其他分享 >通俗解释 JVM CAS 机制

通俗解释 JVM CAS 机制

时间:2023-04-10 10:45:26浏览次数:51  
标签:变量 CAS 原子 线程 JVM 操作 共享 通俗

JVM 的 CAS,即 Compare And Swap,是一种并发编程中常用的保证原子性的技术。

通俗地讲,CAS 用于在多线程环境下对共享变量的值进行原子操作,即多个线程同时访问同一个共享变量,但只有一个线程能修改这个变量的值,并且这个操作是原子的,不会被其他线程打断。

具体来说,CAS 操作包含如下三个参数:共享变量 V、期望值 A 和新值 B。只有在共享变量 V 的值等于期望值 A 的情况下,才会将共享变量 V 的值修改为新值 B。如果在操作过程中发现共享变量 V 的值已经被其他线程改变,那么 CAS 操作不会成功。此时,需要重新获取最新的共享变量 V 的值,然后再尝试 CAS 操作,直到操作成功为止。

使用 CAS 操作可以避免多个线程同时修改同一个共享变量时产生的问题,保证了数据的一致性。在 Java 并发包中,AtomicInteger、AtomicLong 等原子类都使用了 CAS 技术,保证了其操作的原子性。

需要注意的是,CAS 操作可能会存在一些问题,例如ABA问题等。但是,通过解决这些问题并结合其他并发技术,CAS 依然是一种比较高效的保证原子操作的技术之一。

标签:变量,CAS,原子,线程,JVM,操作,共享,通俗
From: https://www.cnblogs.com/chaowolf/p/17302180.html

相关文章

  • MongoDB、Redis、HBase、Cassandra、Elasticsearch、ClickHouse等NoSQL数据库简介及优
    MongoDBMongoDB是一个基于文档的NoSQL数据库,它使用BSON(二进制JSON)格式存储数据。MongoDB支持动态查询,可以轻松地处理非结构化数据。它还支持水平扩展,可以在多个节点上分布数据。优点:灵活性高,支持非结构化数据存储。支持水平扩展,可以在多个节点上分布数据。支持动态查询,可......
  • JVM
    什么是JVMjvm是java虚拟机运行在用户态、通过应用程序实现java代码跨平台、与平台无关、实际上是"一次编译,到处执行"从微观来说编译出来的是字节码!去到哪个平台都能用,只要有那个平台的JDK就可以运行!字码好比是一个人,平台好比为国家,JDK好比这个国家的语言!只要这个人(字节码)有了......
  • Django条件查询的Case,When具体使用
    这个操作类似于数据库中ifelifelse的逻辑。1、数据准备:models.pyclassClient(models.Model):REGULAR='R'GOLD='G'PLATINUM='P'ACCOUNT_TYPE_CHOICES=[(REGULAR,'Regular'),(GOLD,'Gold&#......
  • JVM系统优化实践(14):GC可视化工具
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~工欲善其事,必先利其器。知道了GC工作原理,学会了看GC日志之后,再来了解一下分析GC的工具。它们分别是jstat、jmap、jhat。jstat顾名思义,主要是用于查看JVM的内存和GC情况。先用jps找出Java进程的PID,再用jstat-gc[PID]查看JVM的内存......
  • kettle从入门到精通 第十课 kettle switch/case、过滤记录、数值范围
    1、java代码里面有ifelse、switch-case等流程控制,kettle也有相应控件。下图便用到switch/case、过滤记录、数值范围控件。 2、 switch/case步骤1)步骤名称:可自定义2)switch字段:需要判断的字段,从前置步骤中选择3)使用字符串包含比较:如果勾选效果和java里面的contains一样,否则......
  • Lucas定理
      //需要先预处理出fact[],即阶乘inlinellC(llm,lln,llp){returnm<n?0:fact[m]*inv(fact[n],p)%p*inv(fact[m-n],p)%p;}inlinelllucas(llm,lln,llp){returnn==0?1%p:lucas(m/p,n/p,p)*C(m%p,n%p,p......
  • 【Service & BroadcastReceiver相关】
    android开发中如何实现开机自启动http://gundumw100.iteye.com/blog/906188监听应用程序安装和卸载http://zhangkun716717-126-com.iteye.com/blog/1192479使用service定期执行一个服务http://gundumw100.iteye.com/blog/896880利用BroadcastReceive......
  • 图解 SQL 执行顺序,通俗易懂!
    ​这是一条标准的查询语句:这是我们实际上SQL执行顺序:我们先执行from,join来确定表之间的连接关系,得到初步的数据where对数据进行普通的初步的筛选groupby分组各组分别执行having中的普通筛选或者聚合函数筛选。然后把再根据我们要的数据进行select,可以是普通字段查询也......
  • Java虚拟机运行时数据区(JVM_2)
    2.3运行时数据区(Run-TImeDataAreas)2.3.1官网概括官网;https://docs.oracle.com/javase/specs/jvms/se8/html/index.htmlTheJavaVirtualMachinedefinesvariousrun-timedataareasthatareusedduringexecutionofaprogram.Someofthesedataareasarecreate......
  • CAS & volatile
    1.CAS1.1问题在JDK5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优......