当前位置: 首页 > news >正文

compareAndSet怎么用

compareAndSet是 Java 中原子操作类(如 AtomicBoolean, AtomicInteger等)提供的一个关键方法,用于实现无锁的线程安全操作。以下是详细解释:

1. 方法定义(以 AtomicBoolean为例)

public final boolean compareAndSet(boolean expect, boolean update)

2. 工作原理(CAS 操作)

这是一个原子操作​(不会被线程调度打断),执行逻辑如下:

if (当前值 == expect) {当前值 = update;return true;  // 修改成功
} else {return false; // 修改失败
}

3. 在您代码中的具体应用

private static final AtomicBoolean isRunning = new AtomicBoolean(false);public static void init() {// 尝试将状态从 false 改为 trueif (!isRunning.compareAndSet(false, true)) {logger.info("初始化已在执行中,跳过本次操作");return;}try {// 执行初始化逻辑...} finally {isRunning.set(false); // 重置状态}
}

4. 关键特点

特性

说明

原子性

整个比较+设置操作是CPU指令级的原子操作

无锁

不需要 synchronized关键字,避免线程阻塞

线程安全

适合高并发场景的状态管理

轻量级

比传统锁性能更高

5. 与传统 synchronized的对比

// 传统方式(有锁)
synchronized(lock) {if (!isRunning) {isRunning = true;// 执行逻辑...}
}// CAS方式(无锁)
if (atomicBoolean.compareAndSet(false, true)) {// 执行逻辑...
}

6. 什么场景更合适?

  1. 启动顺序控制​:@Order(Integer.MIN_VALUE)可能被多个 Runner 使用

  2. 防御性编程​:防止意外通过反射等方式多次调用 init()

  3. 性能优化​:避免不必要的锁竞争

7. 底层实现

实际使用的是 CPU 的 ​CAS 指令​(Compare-And-Swap),现代处理器(x86 的 CMPXCHG指令)都直接支持这种原子操作。

8. 典型应用场景

  • 状态标志管理(如您的 isRunning)

  • 计数器(AtomicInteger)

  • 无锁数据结构(ConcurrentHashMap 的桶操作)

  • 自旋锁实现

使用 compareAndSet比原来的 volatile + synchronized方案更简洁高效,且能提供更强的线程安全保障。

http://www.dtcms.com/a/536821.html

相关文章:

  • Skill Seeker——一站式自动化将文档网站、GitHub 仓库和 PDF 文件转换为可部署 AI 技能的深度解析
  • 浅谈 Agent 开发工具链演进历程
  • 帝国cms小说阅读网站模板果洛电子商务网站建设哪家快
  • 学校网站建设背景科技作品手工
  • SmartPLS下载安装教程(附安装包)SmartPLS 4.1保姆级图文教程
  • ECR扫描管理功能完整实现:提升云原生镜像安全管控效率
  • PySide6 Win10记事本从零到一——第二章 第一个窗口程序
  • 商务英语资源合集
  • Shell 变量
  • 基于vue的在线学习系统
  • 【题解】洛谷 P4291 [HAOI2008] 排名系统 [字符串 + 平衡树]
  • html5做网站好吗漳州做网站制作
  • 做网站从哪里找货源江门制作公司网站
  • 鸿蒙Flutter三方库适配指南-02.Flutter相关知识基础
  • 随机SVD:大规模矩阵分解的高效算法
  • mysql 数据库做异机定时器自动全库备份
  • ctf常用古典密码
  • 手机网站程序如何自己设计图片
  • 怎么看一个网站什么程序做的国外网站建设素材库
  • MongoDB的$sample是啥?
  • __金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
  • 缓存相关,redis
  • 零基础如何准备蓝桥杯
  • 佛山 网站设计公司中山高端网站建设
  • 2.2.1.10 大数据方法论与实践指南-Kafka 使用规范
  • 培训班在哪个网站找网站建设注意事情
  • 企业的网站建设公司南阳做网站 汉狮公司
  • 数据驱动下的金融AI实践:技术落地路径、方法论沉淀与场景价值挖掘
  • 百日挑战-单词篇(第五天)
  • 做网站的开发软件seo优化的优点