news 2026/9/2 21:42:52

什么是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/9/2 20:54:32

揭秘PHP医疗数据脱敏漏洞:5大新规你必须立即掌握

第一章:PHP医疗数据脱敏新规背景与合规挑战近年来,随着《个人信息保护法》和《数据安全法》的全面实施,医疗行业成为数据合规监管的重点领域。医疗信息系统中广泛使用PHP作为后端开发语言,其处理的患者姓名、身份证号、病历记录等…

作者头像 李华
网站建设 2026/9/1 12:09:16

完爆ChatGPT!谷歌这招太狠:连你的「阴阳怪气」都能神还原

谷歌发布Gemini 2.5 Flash原生音频模型,不仅能保留语调进行实时语音翻译,更让AI在复杂指令和连续对话中像真人一样自然流畅。这一更新标志着AI从简单的「文本转语音」跨越到了真正的「拟人化交互」时代。想象这样一个场景:你戴着耳机走在印度…

作者头像 李华
网站建设 2026/9/2 7:00:38

立煌AUO15寸友达液晶屏幕G150XTN03.4工业液晶模组参数查询

在工业设备、医疗终端和自动化控制等领域,显示模组不仅仅是“输出信息”的窗口,更是系统交互与监测的关键组件。友达光电(AUO)推出的 G150XTN03.4 正是一款针对 工业控制、机械仪表及信息显示终端 打造的高可靠性液晶屏。它在 亮度…

作者头像 李华
网站建设 2026/9/2 10:56:55

PHP 8.6 JIT缓存如何影响生产环境?3个真实案例告诉你真相

第一章:PHP 8.6 JIT缓存机制的演进与核心原理PHP 8.6 在性能优化方面迈出了关键一步,其对JIT(Just-In-Time)编译器的改进不再局限于运行时代码生成,而是引入了持久化的JIT缓存机制。这一机制显著降低了重复请求中JIT编…

作者头像 李华
网站建设 2026/9/2 21:01:12

基于单片机的太阳能自动追光系统

第一章 系统开发背景与意义 在全球能源转型背景下,太阳能作为清洁能源的利用率持续提升,但固定安装的太阳能板存在能量转换效率低的问题——当阳光与面板法线夹角偏离10时,发电效率下降约15%。传统手动调整方式难以实时追踪太阳轨迹&#xff…

作者头像 李华