AQS数据结构——同步队列

AQS(AbstractQueuedSynchronizer)是Java并发编程的基础框架,用于构建锁和其他同步组件。它采用FIFO同步队列,应用于ReentrantLock、CountDownLatch等。AQS核心思想包括独占锁和共享锁模式,使用CLH队列锁实现线程阻塞和唤醒机制。竞争失败的线程会被包装成Node加入同步队列,同步状态通过CAS保证原子性更新。
摘要由CSDN通过智能技术生成

什么是AQS

aqs即AbstractQueuedSynchronizer(队列同步器)抽象类的简称,它是Java并发用来构建锁,和其他同步组件的基础框架,内部使用先进先出的同步队列实现,比如 ReentrantLock、CountDownLatch 和 Semaphore 等都是基于 AQS 实现的
AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
AQS的独占锁和共享式锁
独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享资源,如:ReadWriteLock。AQS的内部类Node定义了两个常量SHARED和EXCLUSIVE,他们分别标识 AQS队列中等待线程的锁获取模式

AQS数据结构:

在这里插入图片描述节点之间相互引用,头节点指向尾节点,每个节点存储内容还包括当前节点的状态

竞争失败的线程会打包成Node(源码里是aqs类的一个内部类)放到同步队列,

了解其中的方法
模板方法:&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值