AQS

Lock接口,在java.util.concurrent的lock包下。

锁是用来控制多个线程访问共享资源的方式。

AQS(AbstractQueuedSynchronizer)简称同步器,

同步器是构建锁和其他同步组件的基础框架,主要依赖

一个atomic int 成员变量来表示同步状态,以及通过一个FIFO队列构成等待队列。

它的子类必须重写AQS的几个protected修饰的用来改变同步状态的方法,其它方法主要是实现了排队和阻塞机制。

状态的更新使用getState,setState以及compareAndSetState三个方法。

同步器是实现锁的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。

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

AQS使用模板设计模式

可重写的方法:

protected boolean tryAcquire(int arg)   独占式获取同步状态,实现该方法需要查询当前状态并判断同步是否符合预期,然后再进行CAS设置同步状态。

jprotected boolean tryRelease(int arg) 独占试释放同步状态,等待获取同步状态的线程将有机会获取同步状态

 

protected int tryAcquireShared(int arg) 共享试获取同步状态,返回大于等于0的值,表示获取成功,反之获取失败。

protected boolean tryReleaseShared(int arg) 共享试释放同步状态

protected boolean isHeldExclusively() 当前同步器是否在独占模式下被线程占用,一般该方法表示是否被当前线程所独占。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值