什么是AQS?

什么是AQS
ReentrantLock、ReentrantReadWriteLock底层都是基于AQS来实现的
AQS的全称是AbstractQueuedSynchronizer,是抽象队列同步器,其实他就是一个用来构建锁和同步器的框架,内部实现的关键是:先进先出的队列、state状态,在LOCK包中的相关锁(常用的有ReentrantLock、 ReadWriteLock)都是基于AQS来构建。

AQS的核心思想是什么?它是怎么实现的?
AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用。
AQS使用一个voliate int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操作实现对其值的修改。
AQS定义了两种资源获取方式:独占(只有一个线程能访问执行)和共享(多个线程可同时访问执行)

AQS:操作资源的方式有独占和共享两种方式,在理解它之前,先去了解它如何使用,我们随便写一个类,再写一个内部类继承AQS,重写特定的方法就可以使用,因为有独占和共享两种方式所以也有对应的方法,独占有tryAcquire和tryRelease。共享有tryAcquireShared和tryReleaseShared。AQS的核心由一个阻塞队列和一个volatile修饰的state变量组成。AQS可以通过cas对state变量进行修改,一般来说,state为0时表示无锁状态,state大于0时表示有线程获得锁。从代码上看,如果我们调用lock方法是,触发Acquire方法,该方法又会去调用tryAcquire方法以cas的方式尝试获取锁,如果获取失败,就调用addWaiter方法把当前线程包装为Node对象添加到阻塞队列中。然后调用acquireQueued方法通过自旋去获取锁。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值