AQS
2019-03-23 本文已影响0人
watermountain
AQS 是一个用来构建锁和Synchronizer(同步器) 的框架。
使用AQS 能够简单且高效地构造出应用广泛的大量的Synchronizer。
除了下面的类,SynchronousQueue 和 FutureTask 也是构建于AQS 之上的。
AQS 解决了实现一个Synchronizer 的大量细节,比如等待线程的FIFO 队列。
基于AQS 构建的Synchronizer 只可能在一个点上发生阻塞,这样降低了上下文切换的开销,并提高了吞吐量。AQS 的设计充分考虑了可伸缩性。
一个基于AQS 的同步器所执行的基本操作,是一些不同形势的获取和释放操作。
获取操作是状态依赖的操作,总能够阻塞。
借助锁和信号量,“获取”的含义变得相当直观-获取锁或者许可-并且调用者可能不得不去等待,直到同步器处于可发生的状态。
为了让一个类具有状态依赖性,它必须拥有一些状态。同步类中有一些状态需要管理,这项任务由AQS负责:
AQS 关了一个关于状态信息的单一整数,状态信息可以通过protected 类型的getState、setState 和 compareAndSetState 等方法进行操作。这可以用户表现任何状态: