AQS
AbstractQueuedSynchronizer使用标志位+队列的方式,记录状态、获取、释放状态保护的资源(如锁、Semaphore)。
同步队列(sync queue)的状态:
CANCELLED(1) | 由于超时或中断,和这种节点关联的线程已经被取消并且不会再次进入阻塞状态。 |
---|---|
SIGNAL(-1) | 表示和后继节点关联的线程已经或将要被阻塞,因此当前节点释放或取消时,必需唤醒后继节点中的线程。 |
CONDITION(-2) | 表明该线程被处于条件队列,就是因为调用了Condition.await而被阻塞。 |
PROPAGATE(-3) | 表示下一次acquireShared应该无条件传播共享锁。 |
0 | 0表示当前节点在sync队列中,等待着获取锁 |