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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。