AQS的应用
2023-12-13 06:02:23
什么是AQS
口述:全称是 AbstractQueuedSynchronizer,是一个框架,提供了这种
通用的同步器机制
,它里面也是定义了很多的方法,像获取锁啊释放锁啊,其实释放啊获取啊是基于state属性来做的,state属性呢表示了当前资源的状态,是需要子类去定义和维护这个状态的,控制如何获取锁和释放锁,对state状态的修改也是用到了CAS机制,保证了修改的正确性,其实AQS里面还定义了很多其他的方法,他呢是一个通用的框架,像ReentrantLock、Countdownlatch、信号量啊就是基于AQS实现的。
1. 概述
- 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁
- getState - 获取 state 状态
- setState - 设置 state 状态
- compareAndSetState -
cas 机制设置 state 状态
- 提供了基于
FIFO 的等待队列
,类似于 Monitor 的 EntryList - 条件变量来实现
等待
、唤醒机制
,支持多个条件变量
,类似于 Monitor 的 WaitSet
AQS 要实现的功能目标:
阻塞
版本获取锁acquire
和非阻塞
的版本尝试获取锁tryAcquire
- 获取锁超时机制
- 通过打断取消机制
- 独占机制及共享机制
- 条件不满足时的等待机制
2. ReentrantLock 原理
文章来源:https://blog.csdn.net/qq_51240148/article/details/134961192
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!