news 2026/2/3 5:31:27

什么是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/1/29 12:23:36

农业传感器数据看不懂?用PHP三步实现智能可视化分析

第一章:农业传感器数据可视化的核心挑战在现代农业系统中,传感器网络持续采集土壤湿度、气温、光照强度和作物生长状态等多维数据。然而,将这些海量、异构且高频率的数据转化为直观可视的图形界面,面临诸多技术挑战。数据的实时性…

作者头像 李华
网站建设 2026/1/29 13:53:39

高并发场景下的Symfony 8缓存优化策略(千万级流量验证)

第一章:高并发场景下Symfony 8缓存机制的核心挑战 在高并发系统中,Symfony 8 的缓存机制面临性能、一致性和可扩展性等多重挑战。随着请求量的急剧上升,传统的文件系统缓存已无法满足毫秒级响应的需求,容易成为系统瓶颈。 缓存后…

作者头像 李华
网站建设 2026/1/29 13:27:46

【量化风控专家亲授】:基于R语言的Copula参数估计全流程拆解

第一章:Copula模型在金融风险管理中的核心价值在现代金融风险管理中,资产收益之间的相关性结构建模至关重要。传统线性相关系数(如Pearson相关系数)难以捕捉极端市场条件下的非对称依赖关系。Copula模型通过将联合分布分解为边缘分…

作者头像 李华
网站建设 2026/1/29 13:56:14

R Shiny多模态导入陷阱揭秘:80%项目失败背后的隐藏Bug

第一章:R Shiny多模态导入陷阱揭秘:80%项目失败背后的隐藏Bug 在构建复杂的R Shiny应用时,开发者常需导入多种数据格式(如CSV、Excel、JSON)和外部库(如plotly、shinydashboard)。然而&#xff…

作者头像 李华
网站建设 2026/1/29 10:58:14

AgentScope Java 1.0 发布:赋能企业级智能体应用开发与生产落地

作者:亦盏 AgentScope 简介 AgentScope 是阿里巴巴推出的一款以开发者为核心,专注于智能体开发的开源框架,是继 ModelScope(魔搭社区)后在 Agent 层的战略产品。它的核心目标是解决智能体在构建、运行和管理中的难题…

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

【纤维协程并发测试实战】:掌握高并发场景下的性能优化秘诀

第一章:纤维协程并发测试概述在现代高并发系统开发中,纤维(Fiber)作为一种轻量级的用户态线程,正逐渐成为提升程序并发性能的重要手段。与操作系统级线程相比,纤维具备更低的上下文切换开销和更高的调度灵活…

作者头像 李华