概览

类注释
AQS是一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件等)。
此类旨在成为大多数依赖单个原子int值来表示状态的同步器的基础,子类必须定义更改此状态的受保护方法,并定义该状态在获取或释放此对象方面的含义。
鉴于这些,此类中的其他方法执行所有排队和阻塞机制。 子类可以维护其他状态字段,但只有使用方法getState 、 setState和compareAndSetState操作的原子更新的int值才会被同步跟踪。
我的理解:AQS内部维持了线程等待队列,通过一个int值来表示同步器的状态,这个状态值的意义由子类自己维护。
子类应定义为非公共内部帮助类,用于实现其封闭类的同步属性。 AbstractQueuedSynchronizer类不实现任何同步接口。 相反,它定义了诸如acquireInterruptibly方法,这些方法可以由具体锁和相关同步器酌情调用以实现它们的公共方法。
我的理解:使用方法就是由非公有内部类继承此类,然后由我们自己决定怎样提供自己的同步器公共方法。
此类支持默认独占模式和共享模式中的一种或两种。 当以独占模式获取时,其他线程尝试获取不会成功。
多个线程获取的共享模式可能(但不一定)成功。 这个类不“理解”这些差异,除了机械意义上的区别,当共享模式获取成功时,下一个等待线程(如果存在)也必须确定它是否也可以获取。 在不同模式下等待的线程共享同一个 FIFO 队列。
通常,实现子类仅支持这些模式中的一种,但两种模式都可以发挥作用,例如在ReadWriteLock 。 仅支持独占或仅共享模式的子类不需要定义支持未使用模式的方法。
我的理解:此类支持独占模式和共享模式,但是默认是独占模式,并且所有线程共享同一个队列。
该类定义了一个嵌套的AbstractQueuedSynchronizer.ConditionObject类,该类可以被支持独占模式的子类用作Condition实现,其中方法isHeldExclusively报告是否针对当前线程独占同步,使用当前getState值调用的方法release完全释放此对象,并acquire ,给定这个保存的状态值,最终将此对象恢复到其先前获取的状态。 没有AbstractQueuedSynchronizer方法否则会创建这样的条件,因此如果无法满足此约束,请不要使用它。AbstractQueuedSynchronizer.ConditionObject的行为当然取决于其同步器实现的语义。
此类为内部队列提供检查、检测和监视方法,以及为条件对象提供类似方法。 这些可以根据需要使用AbstractQueuedSynchronizer的同步机制导出到类中。
此类的序列化仅存储底层原子整数维护状态,因此反序列化的对象具有空线程队列。 需要可序列化的典型子类将定义一个readObject方法,该方法在反序列化时将其恢复到已知的初始状态。
我的理解:如图一所示的ConditionObject内部类实现了Condition接口,这个类为支持独占模式的子类所使用。这个类提供了检查、检测和监视方法。这个类的序列化只存储状态值。
网友评论