码迷,mamicode.com
首页 > 其他好文 > 详细

AQS:AbstractQueuedSynchronize类

时间:2019-07-15 23:56:51      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:状态   还原   stat   tst   没有   队列   lock   ble   相关   

AbstractQueuedSynchronize 抽象队列同步器 类:

简介:

-提供了一个框架来实现阻塞锁和依赖先进先出(FIFO:first-in-first-out)等待对列的相关同步器(信号量、事件等)

 此类被设计为对大多数依赖单原子 int 值来表示状态的同步器来说非常有用,子类必须定义那些 改变状态 以及 定义该状态对于被获取或释放有意义的protected方法

 鉴于此,此类的其他方法执行所有队列和阻塞机制

-子类可以维护其他状态字段,到那时只能原子更新 int 值通过使用方法getState、setState、compareAndSetState来跟踪于遵守同步器

  子类应该定义non-public的内部类帮助器,用于实现其封闭类的同步属性,AbstractQueuedSynchronize不实现任何同步接口,相反他定义了像acquireInterruptible这样的方法,

  可以被具体的 锁 和相关同步器作为适当的调用实现他们的公共方法

-该类默认支持独占和共享模式:以独占模式获取时,其他线程尝试获取操作无法成功;共享模式被多个线程获取可能(但不一定)成功

 除了机械意义上的差异,当共享模式获取成功时,下一个等待线程也许确定它是否也可以获取成功,在不同的模式下等待的线程共享相同的FIFO queue

 通常子类只支持其中一种模式,但是两种模式都可以发挥作用,例如:ReadWriteLock中。只支持其中一种模式的不需实现另一种未使用的模式

-该类定义了一个嵌套类:ConditionObject,通过子类支持排他模式,可以作为Condition使用

 方法release使用当前getState值调用,完全释放这个对象,并且acquire方法给定这个保存的状态值,最终这个对象恢复到他以前获取得的状态

 没有AQS方法创建这样一个条件,所以不满足这个约束,不要使用它。ConditionObject的行为取决于他的同步器实现的语义

-该类作为内部queue提供检查、检测、和监视方法,以及conditionObject对象提供类似的方法。可以根据使用AQS将他们导出到类中,使用他们的同步机制

-该类的序列化只存储底层原子int维护状态,因为反序列化对象具有空队列,需要序列化典型的子类定义一个readObject方法,该方法在反序列化时将还原为已知的初始状态

AQS:AbstractQueuedSynchronize类

标签:状态   还原   stat   tst   没有   队列   lock   ble   相关   

原文地址:https://www.cnblogs.com/gsanye/p/11192166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!