AQS

AbstractQueuedSynchronizer使用标志位+队列的方式,记录状态、获取、释放状态保护的资源(如锁、Semaphore)。

同步队列(sync queue)的状态:

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

References

  1. 聊聊并发(十二)—AQS分析 比较好
  2. java并发编程--AbstractQueuedSynchronizer加锁和解锁分析(二)
  3. 深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上)
  4. 怎么理解Condition
  5. Condition的await-signal流程详解
  6. AbstractQueuedSynchronizer的介绍和原理分析
  7. Java多线程系列--“JUC锁”01之 框架

results matching ""

    No results matching ""