首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java并发编程中的CAS原理及AQS(AbstractQueuedSynchronizer)的工作原理

Java并发编程中的CAS原理及AQS(AbstractQueuedSynchronizer)的工作原理

作者头像
用户1750537
发布2025-08-29 09:33:46
发布2025-08-29 09:33:46
1120
举报
Java并发编程中的CAS原理及AQS(AbstractQueuedSynchronizer)的工作原理
  • CAS的基本思想是由CPU提供的原子指令,可以保证对内存中的值进行原子操作,避免了使用锁的开销。CAS操作通常包括三个操作数,即内存地址V,旧的预期值A和新的值B,它的执行过程如下:
  • AQS在实现同步器时,可以通过重写一些方法来控制线程的排队和阻塞
在这里插入图片描述
在这里插入图片描述

CAS(Compare and Swap,比较并交换)是一种并发编程中常用的原子操作。它是一种乐观锁的实现方式,用于实现非阻塞算法。CAS原理是通过比较内存中的值与预期值,如果相等则将新值写入内存,否则不做任何操作。

CAS的基本思想是由CPU提供的原子指令,可以保证对内存中的值进行原子操作,避免了使用锁的开销。CAS操作通常包括三个操作数,即内存地址V,旧的预期值A和新的值B,它的执行过程如下:

  1. 检查内存中地址V的值是否等于预期值A;
  2. 如果相等,将地址V的值更新为新值B;
  3. 如果不相等,说明其他线程已经修改了地址V的值,当前线程继续尝试。

AQS(AbstractQueuedSynchronizer)是Java并发包中的一个用于构建同步器的框架。AQS的工作原理是通过一个FIFO队列(即等待队列)来管理线程的排队和阻塞。AQS包含两种模式:独占模式和共享模式。

在独占模式下,AQS可以实现独占锁(如ReentrantLock)和一些阻塞队列(如Semaphore)等同步器。在共享模式下,AQS可以实现共享锁(如CountDownLatch)和一些线程池(如ThreadPoolExecutor)等同步器。

AQS的核心数据结构是一个双向链表,每个节点代表一个线程。当一个线程需要获取同步器的锁时,它会以节点的形式插入到等待队列的末尾。当锁被释放时,AQS会从等待队列中选择一个节点(通常是队头节点)唤醒并允许其获取锁。

AQS在实现同步器时,可以通过重写一些方法来控制线程的排队和阻塞

如:

  • tryAcquire()和tryRelease()方法:用于尝试获取和释放同步器的状态,可以通过CAS操作来实现原子更新。
  • shouldParkAfterFailedAcquire()方法:用于判断线程是否需要阻塞。
  • unparkSuccessor()方法:用于唤醒等待队列中的下一个节点。

通过AQS,Java并发包可以提供各种同步器和线程安全的工具,例如ReentrantLock、CountDownLatch、Semaphore等。这些同步器都是基于AQS的工作原理来实现的,并且可以方便地扩展和定制。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java并发编程中的CAS原理及AQS(AbstractQueuedSynchronizer)的工作原理
  • CAS的基本思想是由CPU提供的原子指令,可以保证对内存中的值进行原子操作,避免了使用锁的开销。CAS操作通常包括三个操作数,即内存地址V,旧的预期值A和新的值B,它的执行过程如下:
  • AQS在实现同步器时,可以通过重写一些方法来控制线程的排队和阻塞
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档