news 2026/9/12 23:30:46

什么是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/13 2:55:07

基于单片机的铁轨长度检测系统

第一章 系统开发背景与意义 在铁路建设与维护中,铁轨长度的精准检测是保障轨道对接精度、避免列车运行振动异响的关键环节。传统检测方式依赖人工拉尺测量,存在效率低(单段检测需2-3人配合,耗时5分钟以上)、误差大&…

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

PHP 8.6性能监控从入门到精通(仅限高级工程师掌握的技术细节)

第一章:PHP 8.6 的性能监控面板PHP 8.6 引入了内置的轻量级性能监控面板,开发者无需依赖外部扩展即可实时查看脚本执行效率、内存使用和函数调用堆栈。该面板通过配置启用后,会在页面底部以悬浮层形式展示关键指标,适用于开发与调…

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

TeleTron项目技术优化原理之上下文并行技术

1.Ulysses Context Parallel (上下文并行)原理下面的例子主要展示的是 Image Tokens(最复杂的部分)。TeleTron 中 DiT 模型处理长序列的核心机制:如何通过 SeqAllToAll4D 在“序列并行”和“头并行”之间转换。4 个大框…

作者头像 李华
网站建设 2026/9/12 14:23:33

Simulink上四永磁同步电机偏差耦合转速同步控制仿真模型的设计与实现

simulink上搭建的四永磁同步电机偏差耦合转速同步控制仿真模型。 最近在工业自动化项目里经常遇到多电机同步的问题,特别是AGV小车底盘驱动、传送带协同这些场景。四个永磁同步电机(PMSM)的转速同步要是没搞好,轻则产品堆积卡壳&…

作者头像 李华