首页 > 其他分享 >AQS

AQS

时间:2024-02-04 10:33:05浏览次数:26  
标签:AQS 独占 队列 共享资源 同步器 线程

AQS:AbstractQueuedSynchronizer 抽象队列同步器
抽象:抽象类,只实现⼀些主要逻辑 定义一些默认的模板方法,有些⽅法由⼦类实现;
队列:使⽤先进先出(FIFO)队列存储数据;
同步:实现了同步的功能。
核心思想:被请求的共享资源空闲时,首先获得共享资源锁的线程被设置为工作线程,共享资源设置为锁定状态(AQS内部使⽤了⼀个volatile的变量state来作为资源的标识)。共享资源被锁定,那么对于其他未获得锁的线程来说,则需要一套线程排队阻塞以及等待唤醒的锁分配机制,这个机制主要是通过AQS内部维护了一个FIFO的CLH队列(虚拟双向循环队列),该队列是一个虚拟的队列,即不存在队列实例,仅存在节点间的关联关系。访问共享资源的线程被封装为Node节点,维护在这个CLH队列中。
image
资源共享方式:独占式(排他锁)、共享式
独占模式(Exclusive):资源是独占的,⼀次只能⼀个线程获取。如ReentrantLock。
共享模式(Share):同时可以被多个线程获取,具体的资源个数可以通过参数指定。如Semaphore/CountDownLatch。
常见基于AQS的同步器:AQS是⼀个⽤来构建锁和同步器的框架,使⽤AQS能简单且⾼效地构造出应⽤⼴泛的同步器,⽐如我们提到的ReentrantLock,Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。

标签:AQS,独占,队列,共享资源,同步器,线程
From: https://www.cnblogs.com/yyz0225/p/18005689

相关文章

  • AQS原理学习
    AQS类如其名,抽象的队列式同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...框架它维护了一个volatileintstate(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。AQS定......
  • 三分钟带你搞懂 AQS 原理设计
    转载:三分钟带你搞懂AQS原理设计本文从ReentrantLock​源码分析到AQS​原理解析,进行了一次知识内容的总结,从上文的分析中可以看出,AQS是JUC包下线程同步器实现的基石。一、摘要在之前的文章中,我们介绍了ReentrantLock、ReadWriteLock、CountDownLatch、CyclicBarrier、Sem......
  • AQS原理
    转载自:为什么说ReentrantLock是悲观锁呢?-Java3y的回答-知乎  面试官:今天我们来聊聊lock锁吧?候选者:嗯嗯嗯,没问题面试官:先问点简单的吧,刚睡醒,还是有点困的。候选者:刚睡醒来面我干嘛?你就这态度?面试官:哈?你刚说了什么?候选者:没事,我没说话…面试官:你知道什么叫做公平和非公......
  • 深入AQS原理
    转载自:【深入AQS原理】我画了35张图就是为了让你深入AQS前言 谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关的方法,我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQ......
  • AQS_应用
    RocketMQ-CountDownLatch2publicclassCountDownLatch2{privatefinalSyncsync;/***Constructsa{@codeCountDownLatch2}initializedwiththegivencount.**@paramcountthenumberoftimes{@link#countDown}mustbeinvokedb......
  • AQS源码解析
    AQS结构特性内部包含Node、ConditionObject静态内部类,Node用来存储没竞争到锁的线程状态、CondidtionObject是对条件变量的封装;volatileintstate变量记录锁的状态,1表示锁被持有、0表示锁被释放,同时对应三个方法来更改/获取锁的状态:getState()、setState(intnewState......
  • AQS (AbstractQueuedSynchronizer) 概述
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.c......
  • 锁-AQS篇
    概念:AQS是一种比较经典的模板方法模式的JDK应用AQS其实就是一个可以给我们实现锁的框架内部实现的关键是:先进先出的队列、state状态定义了内部类ConditionObject拥有两种线程模式:独占模式共享模式相关锁:在LOCK包中的相关锁(常用的有ReentrantLock、ReadWriteLock)......
  • AQS
    AQSAQS抽象队列同步器AQS利用一个FIFO双向队列(CLH队列的变体)来完成线程同步状态的管理,同步队列的节点包括以下属性(AQS的内部类):waitStatus的状态:CANCELLED1表示线程获取锁的请求已经取消了SIGNAL-1表示线程已经准备好了,就等资源释放了CONDITION-2表示节点在等待队列......
  • 并发之AQS源码学习
    /****学习AbstractQueuedSynchronizer**1.state是aqs的重要属性,说明锁的使用次数*2.CustomAbstractQueuedSynchronizer,存在head与tail属性,所以其本身就是一个链表。并没有使用集合*3.双向链表(等待队列)*1.head永远都是伪节点(thead=null)*......