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

网站免费建站 图标网站建设seo优化价格

网站免费建站 图标,网站建设seo优化价格,网站开发设计公,网站建设有哪些步骤AQS(AbstractQueuedSynchronizer)机制详解与总结 一. AQS(AbstractQueuedSynchronizer)简介1. 核心理念:2. 核心成员变量state:3. 工作机制简述: 二、AQS的核心任务三、AQS的核心组成四、CAS 与…

AQS(AbstractQueuedSynchronizer)机制详解与总结

  • 一. AQS(AbstractQueuedSynchronizer)简介
    • 1. 核心理念:
    • 2. 核心成员变量state:
    • 3. 工作机制简述:
  • 二、AQS的核心任务
  • 三、AQS的核心组成
  • 四、CAS 与 AQS 的区别与联系
    • 1. CAS(Compare-And-Swap)
    • 2. AQS
    • 3. 关系总结
  • 五、使用 AQS 实现可重入公平锁 实现步骤

一. AQS(AbstractQueuedSynchronizer)简介

AQS 是 Java 并发包中用于构建锁(如 ReentrantLock)、同步器(如 SemaphoreCountDownLatch)和协作工具类的核心框架。

1. 核心理念:

  • 独占资源控制: 当共享资源空闲时,线程尝试通过原子操作获得资源,并设置为锁定状态。
  • 队列化等待机制: 如果资源被占用,线程将被加入一个基于 FIFO 的虚拟双向队列(CLH队列) 中进行阻塞等待,直到被唤醒再次尝试。

2. 核心成员变量state:

// 表示同步状态的变量
private volatile int state;
  • state 是 AQS 中用于表示同步状态的关键变量。
    • ReentrantLock 中,state 表示锁的重入次数;
    • Semaphore 中,state 表示剩余的许可证数量;
    • CountDownLatch 中,state 表示倒计时计数。
  • 该变量由 volatile 修饰,确保多线程间的可见性。
  • 所有对 state 的修改均通过 CAS(Compare-And-Swap)操作 保证原子性,避免使用重量级的锁。

3. 工作机制简述:

      ┌───────────────┐│     线程A     │└─────┬─────────┘│ acquire()▼┌─────────────────────┐│    AQS(框架)       ││  ┌───────────────┐  ││  │ state(volatile)│◄───CAS原子更新│  └───────────────┘  ││  ┌───────────────┐  ││  │ FIFO等待队列    │◄─入队/出队/唤醒线程│  └───────────────┘  │└─────────────────────┘

(1)获取锁(Acquire):

  • 使用 CAS 尝试修改 state
  • 成功:表示当前线程获取锁成功,继续执行。
  • 失败:进入等待队列(CLH),阻塞当前线程。

(2)释放锁(Release):

  • 同样使用 CAS 更新 state
  • 如果 state 变为允许状态,则唤醒等待队列中的下一个线程。

二、AQS的核心任务

在这里插入图片描述

AQS 作为 Java 并发框架中的核心同步器框架,主要负责以下三个方面:

  1. 同步状态(state)的原子操作
    • 通过 volatile 保证可见性,CAS 保证原子性。
  2. 线程的阻塞与唤醒
    • 利用内置 FIFO 等待队列(CLH队列)管理线程挂起与恢复。
  3. 等待队列的管理
    • 包括节点的入队、出队、取消、唤醒等机制。

三、AQS的核心组成

组件说明
state 变量表示同步状态,具体含义由子类定义:
🔸 Semaphore:剩余许可证数量
🔸 CountDownLatch:倒计时计数
🔸 ReentrantLock:锁状态(含重入次数)
FIFO 等待队列线程在竞争失败后会进入队列,按照顺序等待资源
协作工具类方法acquire()release()await()countDown() 等,
具体行为由子类重写 tryAcquire()tryRelease() 实现

四、CAS 与 AQS 的区别与联系

1. CAS(Compare-And-Swap)

  • 一种无锁原子操作机制。
  • 依赖于硬件指令实现原子性。
  • 三个操作数:V(内存值)、A(期望值)、B(更新值)
  • 如果 V == A,则将 V 更新为 B;否则什么都不做。

2. AQS

  • 一套**构建同步器(如锁、信号量)**的抽象框架。
  • 内部通过 volatile state 表示状态。
  • 使用 CAS 操作来更新 state,保证原子性。
  • 通过 CLH 队列管理线程等待。

3. 关系总结

  • AQS 依赖 CAS 实现对 state 的原子更新。
  • AQS 封装了大量与线程调度、状态管理、阻塞唤醒相关的逻辑,而 CAS 是实现原子性的关键技术手段

五、使用 AQS 实现可重入公平锁 实现步骤

1. 继承 AbstractQueuedSynchronizer

  • 创建一个静态内部类,继承 AQS。
  • 重写核心方法:
    • tryAcquire(int arg)
    • tryRelease(int arg)
    • isHeldExclusively()

2. 实现可重入逻辑

  • tryAcquire 中判断:
    • 若当前线程已持有锁,则支持重入(state++)。
    • 否则尝试通过 CAS 获取锁(state=0 -> 1)。

3. 实现公平性机制

  • tryAcquire 中优先检查等待队列:
    • 若有前驱节点在等待,当前线程需排队,不可直接竞争锁。

4. 封装为外部锁类

  • 外部类持有 AQS 子类的实例。
  • 提供 lock()unlock() 方法,内部调用 AQS 的同步逻辑。

http://www.dtcms.com/wzjs/818098.html

相关文章:

  • 网站开发+兼职挣钱吗网站建设评比
  • 美食网站页面设计源代码企业网站建站元素
  • 怎么制作一个自己的网站前端页面设计网站
  • 泰安建站哪家好国内三大oa系统
  • 做网站apache如何筑巢网站建设
  • 网络维护人员企业网站优化兴田德润优惠
  • 纯静态网站页面优化网站租用服务器
  • 沈阳专业网站seo推广外销网站建立
  • ckplayer网站根目录系统开发软件
  • 住房和城乡建设部网站31号文tpshop开源商城
  • 昆明专业网站建设模板关键词推广系统
  • 网站建设大赛无锡哪里有网站建设便宜些的
  • 做网站做wordpress中rss插件
  • 怎么做化妆品网站内容规划博客网站开发
  • 金融电子商务网站建设怎么组建企业网站
  • o2o生鲜电商平台有哪些小程序seo排名
  • 做哪方面的网站dede购物网站
  • 冠县做网站推广深圳福田区房价多少钱一平米
  • 怎么看网站是不是php语言做的一个人可以完成网站建设吗
  • 品牌网站推广方案怎么百度上搜到自己的网站
  • 浙江网站推广网站的建设维护及管理制度
  • 网站建设收费明细表wordpress1.0
  • 中国建设银行洛阳分行官网站WordPress账号申请
  • 做公司网站的企业wordpress 添加内容
  • 做网站的需要什么要求wordpress 模板函数
  • 关于电商网站建设的论文黄骅贴吧超市转租
  • 如何建设和优化一个网站毕业设计心理评测网站开发
  • 北京网站托管维护永久二级域名分发平台
  • 成都模板建站网站后台有什么用
  • 网站建设总体方案设计让别人做网站应注意什么