AQS的简单说明

1.概述

AQS全称AbstractQueuedSynchronizer,是用来实现 或者队列同步器 的公共基础部分的抽象实现,是整个JUC体系的基石 ,用于解决锁分配给谁的问题,ReentrantLock底层的实现就是AQS。

2.AQS实现原理

AQS内部有一个由volatile修饰(保证其可见性) 的变量state ,用此来表示锁是否被使用,初始化为0,当线程获取到锁时,state加1,此时当其他线程到来时,发现state为1,就会封装为NodeCLH变体的FIFO队列(先进先出的双向链表)中排队等待,等到占用锁的那个线程执行完毕,state减1,然后队列中等待的线程按顺序获取锁。

3.AQS内部类Node说明

在线程加入队列时要封装为Node,在Node中有一个表示线程的等待状态waitStatus,初始值为0。

4.AQS中acquire()方法的简单说明

4.1tryAcquire

这里运用了板块设计模式,tryAcquire方法的具体实现需要子类去实现。

4.2addWaiter

意思就是将此结点封装为Node结点,然后加入到队列中。

4.3acquireQueued

坐稳队列,在此方法中进行队列中前置结点状态的修改以及阻塞结点。

相关推荐
神仙别闹6 小时前
基于C++实现(控制台)景区旅游管理系统
开发语言·c++·旅游
唐青枫6 小时前
Java Undertow 实战指南:从轻量 Web Server 到 Spring Boot 嵌入式容器
java
牛奔14 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
geovindu14 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的14 小时前
汇编——JCC指令
开发语言·汇编·网络安全
mayaairi15 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
前端工作日常16 小时前
我学习到的Java中domain和dto区别
java·后端
kite012116 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
码农学院16 小时前
基于Spring Boot的跨境电商多语言订单管理系统架构设计
java·大数据·spring boot
技术小结-李爽17 小时前
【工具】pom文件的<packaging>
java·maven