jdk中cocurrent下的AbstractQueuedSynchronizer理解记录
?? 以前虽然看过一次AQS的源码实现,但在过一段时间后与同学交流时,发觉自己理解并不够深,印像太浅。需要做一个记录整理,帮助自己消化。
?
AQS中Node的设计:??

几个点:
1. Node实现作者:?"CLH" (Craig, Landin, and?* Hagersten) ,有名的CLH queue
2. 是一个FIFO的链表的实现,对于队列的控制经常要做double-check。
3. Node节点通过一个int waiteStatus代表一些不同意义的状态。
?
SIGNAL=-1,代表是需要当前Node节点需要唤起后一个Node节点。在Node节点enqueue时,会设置前一个节点的状态。这样链式的唤醒,完成这样的一个交接棒。CONDITION = -2 ,?4. nextWaiter一个标志位,就是用于表明是采用的共享锁还是排他锁。同时也是其对应condition队列的引用节点。
Node s = node.next; if (s == null || s.waitStatus > 0) { //位置1 s = null; for (Node t = tail; t != null && t != node; t = t.prev) if (t.waitStatus <= 0) s = t; }