AbstractQueuedSynchronizer 简介

提供了一个基于 FIFO 队列,可以用于构建阻塞锁或者同步容器的基础框架,AQS 是基于 FIFO 队列的实现,因此必然存在一个个节点,Node 就是一个节点。对于 FIFO 队列的各种操作在 AQS 中都已经实现了,AQS 的子类一般只需要重写 tryAcquire(int arg) 和 tryRelease(int arg) 两个方法即可。成为依靠单个原子 int 值来表示状态的有用基础。子类必须定义更改此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。假定这些条件之后,此类中的其他方法就可以实现所有排队和阻塞机制。

tryAcquire(int arg) 试图在独占模式下获取对象状态。此方法应该查询是否允许它在独占模式下获取对象状态,如果允许就获取它可以用此方法来实现 Lock.tryLock() 方法

Acquire(int) 以独占模式获取对象,忽略中断。通过至少调用一次 tryAcquire() 来实现此方法,并在成功时返回。否则在成功之前,一直调用 tryAcquire(int) 将线程加入队列,线程可能重复被阻塞或不被阻塞。可以使用此方法来实现 Lock.lock() 方法

tryRelease(int arg) 试图设置状态来反映独占模式下的一个释放

release(int arg) 以独占模式释放对象。如果 tryRelease(int arg) 返回 true,则通过消除一个或多个线程的阻塞来实现此方法。可以使用此方法来实现 Lock.unlock() 方法

tryAcquireShared(int arg) 试图在共享模式下获取对象状态。此方法应该查询是否允许它在共享模式下获取对象状态,如果允许,则获取它。

tryReleaseShared(int arg) 试图设置状态来反映共享模式下的一个释放

参考:https://www.jianshu.com/p/e4301229f59e

-----------本文结束感谢您的阅读-----------
0%