JAVA并发之谈谈你对AQS的理解
创始人
2024-02-18 09:22:02
0

文章目录

  • 一、AQS是什么
  • 二、AQS具备哪些特性
  • 三、用的哪种设计模式
  • 四、AQS与锁二者之间的关系
  • 五、如何基于AQS实现一把独占锁
  • 六、参考资料

一、AQS是什么

AQS的全称是 (AbstractQueuedSynchronizer ),它定义了一套多线程访问共享资源的同步器框架,是 J.U.C 包中多个组件的底层实现,如 Lock、CountDownLatch、Semaphore 等都用到了 AQS。

通过查看AbstractQueuedSynchronizer的实现类如下图:
aqs

二、AQS具备哪些特性

  1. 阻塞等待队列
    1.1 获取锁失败的线程会进入到一个阻塞等待队列中。
  2. 共享 / 独占
    从本质上来说,AQS 提供了两种锁机制,分别是独占锁,和共享锁。
    2.1 独占锁,就是存在多线程竞争同一共享资源时,同一时刻只允许一个线程访问该共享资源,也就是多个线程中只能有一个线程获得锁资源,比如 Lock 中的ReentrantLock 重入锁实现就是用到了 AQS 中的排它锁功能。
    2.2 共享锁也称为读锁,就是在同一时刻允许多个线程同时获得锁资源,比如CountDownLatch 和 Semaphore 都是用到了 AQS 中的共享锁功能。
  3. 公平/非公平
    3.1 公平:线程在获取锁失败时,直接进入阻塞队列。
    3.2 非公平:线程在获取锁失败时,进入阻塞队列总会再尝试一次获取锁,插队
  4. 可重入
    4.1 对于同一把锁,获取锁的当前线程可以重复获取。
  5. 允许中断
    5.1 提供中断机制,来干预线程之间的通信或协作。

三、用的哪种设计模式

     模板方法模式

四、AQS与锁二者之间的关系

  1. 锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏了实现细节。
  2. 同步器是面向锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。
  3. 锁和同步器很好地隔离了使用者和实现者所需关注的领域。

看两张图吧:

以独占锁ReentrantLock为例:

ReentrantLock

ReentrantLock实现了Lock的接口,没有直接与AQS交互,而是通过一个内部Sync类继承AQS,将同步器的所有调用都映射到对应的Sync对应的方法。

ReentrantLock加锁方法 lock():

lock

查看 Sync的类图继承关系如下:

在这里插入图片描述

五、如何基于AQS实现一把独占锁

  1. 因为AQS内部帮我们把像多线程访问共享资源获取锁失败时,线程 入队、出队、阻塞、唤醒 提供好了,所以实现一把锁非常容易。
  2. 我们只需要关注加锁方法 tryAcquire 和释放锁资源方法 tryRelease 即可,其他的AQS已经为我们实现好了。

代码如下:

/*** Created with IntelliJ IDEA.* @Author: zhaoxn* @Date: 2022/11/25/21:51* @Description:基于AQS实现一把互斥锁*/
public class MutexLock extends AbstractQueuedSynchronizer{@Overrideprotected boolean tryAcquire(int unused) {//cas 加锁if (compareAndSetState(0, 1)) {setExclusiveOwnerThread(Thread.currentThread());return true;}return false;}@Overrideprotected boolean tryRelease(int unused) {//释放锁setExclusiveOwnerThread(null);setState(0);return true;}//调用AQS内部的tryAcquire方法获取锁,失败需要入队或成功直接返回public void lock() {acquire(1);}//调用自己重写的tryAcquire方法获取锁,失败或成功直接返回public boolean tryLock() {return tryAcquire(1);}//重写释放锁资源的方法,至于释放锁以后唤醒队列中阻塞的线程,交给AQS内部就好了public void unlock() {release(1);}}

六、参考资料

         Java并发编程的艺术

相关内容

热门资讯

社评:德国对华政策需摆脱“价值... 德国外长瓦德富尔于12月8日至9日访华,报道称此访将聚焦欧中经贸关系等议题。这次访问在经历了一番波折...
宏观政策维持宽松基调 为“十五... [ 四季度宏观政策保持战略定力,呈现托而不举、精准发力的特征,协调推进逆周期与跨周期调节。在稳住全年...
增值税征与免:“避孕药品和用具... 增值税征与免:避孕药品和用具何以成热点? 文/税海涛声 ——自2026年1月1日起,销售避孕药品和...
【西部大事12.7】中共中央印... 中共中央印发《中国共产党工作机关条例》 近日,中共中央印发了修订后的《中国共产党工作机关条例》(以下...
与19名原告和解,胜利精密仍诉... 12月5日晚间,胜利精密(002426)公告,近日,在江苏省南京市中级人民法院的调解下,公司与陈某涛...
卫冕!中国队夺得乒乓球混团世界... 再次交手,即便日本队疯狂变阵,依旧没能战胜国乒。 北京时间12月7日,乒乓球混合团体世界杯决赛,中国...
首部上市公司监管专项行政法规来... 12月5日,证监会就《上市公司监督管理条例(公开征求意见稿)》(以下简称《条例》)公开征求意见。市场...
即刻上场:难得遇到这样的律师题... 现在都市白领题材电视剧非常多。小编今天要给各位介绍这样一部,描述律师工作生活的电视剧——《即刻上场》...
政策赋能行业升级 浙江美大推动... 在当前以深化供给侧结构性改革、增强供需适配性为核心的政策导向下,中国家电产业正经历一场从规模扩张向质...
紫牛热点|杭州野生动物世界回应... 12月6日,多名网友发布视频称,杭州野生动物世界欢乐剧场演出结束后,一只黑熊突然袭击驯养员,相关画面...