news 2026/4/23 18:45:31

什么是Java中的CAS(Compare-And-Swap)操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是Java中的CAS(Compare-And-Swap)操作

一、Compare-And-Swap

  • 是CPU提供的一种原子指令
  • 无锁并发算法的基础,适合读多写少、竞争不激烈的场景

二、核心思想

  • 比较内存中的某个值是否为预期值,如果是,则更新为新值,否则不做修改。
  • 这个操作是原子性的。

三、工作原理

  1. Compare比较:CAS会检查内存中的某个值是否与期望值相等。
  2. Swap交换:如果相等,则将内存中的值更新为新值。
  3. 失败重试:如果不相等,说明其他线程已经修改了该值,CAS操作失败,一般会利用重试,直到成功。

四、CAS的优点

  • 无锁并发:CAS操作不使用锁,因此不会导致线程阻塞,提高了系统的并发性和性能。
  • 原子性:CAS操作是原子的,保证了线程安全。

五、CAS的缺点

  • ABA问题:CAS操作中,如果一个变量值从A变成B,又变回A,CAS无法检测到这种变化,可能导致错误。(解决方案:引入版本号或时间戳)
  • 自旋开销:CAS通过自旋实现,可能导致CPU资源浪费,尤其在高并发情况下。
  • 单变量限制:CAS操作仅适用于单个变量的更新,不适用于涉及多个变量的复杂操作。

六、在Java中的具体实现:Atomic原子类

import java.util.concurrent.atomic.AtomicInteger; public class AtomicDemo1 { // 基本类型原子类 private AtomicInteger atomicInt = new AtomicInteger(0); public void method1(){ // 标准的CAS使用方式 int oldValue, newValue; do { oldValue = atomicInt.get(); newValue = oldValue + 1; System.out.println(Thread.currentThread().getName() + "--oldValue:" + oldValue +";newValue:" + newValue); } while (!atomicInt.compareAndSet(oldValue, newValue)); // 内置方法 // atomicInt.decrementAndGet(); } public static void main(String[] args) throws InterruptedException { AtomicDemo1 atomicDemo1 = new AtomicDemo1(); Thread thread1 = new Thread(() -> { atomicDemo1.method1(); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } }, "线程1"); Thread thread2 = new Thread(() -> { atomicDemo1.method1(); },"线程2"); thread1.start(); thread2.start(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 7:52:10

【AI工程化必修课】:R-Python模型融合验证的7个关键指标详解

第一章:R-Python模型融合验证的核心意义在数据科学与机器学习工程实践中,R语言与Python各自拥有强大的生态系统。R在统计建模与可视化方面表现卓越,而Python在工程部署与深度学习领域占据主导地位。将两者结合进行模型融合验证,不…

作者头像 李华
网站建设 2026/4/23 7:50:38

基于FPGA的帧同步设计

帧同步 检测数据流,来代表检测数据是否开始发送了,他的头在哪里(几次失锁自己设计)在数字通信中,同步码用于指示数据帧的起始位置。由于信道噪声,接收到的同步码可能会出现比特错误。###第一步:…

作者头像 李华
网站建设 2026/4/23 7:49:51

PHP如何为GraphQL实现智能缓存?这7种方法你必须掌握

第一章:PHP如何为GraphQL实现智能缓存?这7种方法你必须掌握在构建高性能的GraphQL API时,缓存策略是提升响应速度和降低服务器负载的关键。PHP作为后端常用语言,结合GraphQL可以实现多种智能缓存机制,有效减少数据库查…

作者头像 李华
网站建设 2026/4/23 7:49:03

找到你的优质素材灵感库:四个实用平台真实体验

做片子找素材这事,我算是有点发言权了。从刚开始到处求资源包的小白,到现在能淡定选择合适平台的老手,最深的体会是:好素材不光是好看,更得用着放心。今天分享四个我工作室常用的素材站,各有各的脾气&#…

作者头像 李华
网站建设 2026/4/23 7:49:24

流水线作业车间:拓纳斯(TUONAS)均匀光设计,减少视觉疲劳提升效率

流水线作业视觉疲劳难题,光环境优化是核心解决方案流水线车间的连续作业特性,要求员工长时间保持视觉专注。若照明存在眩光、明暗不均等问题,易引发眼酸、干涩、注意力不集中等视觉疲劳,直接导致操作失误增加、生产效率下降&#…

作者头像 李华
网站建设 2026/4/23 7:49:34

Java毕设项目:基于springboot的大学生心理健康评估系统基于springboot高校心理健康评测与服务系统(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华