通过构造函数,对可见的状态标志位(state)进行赋值(#1),当调用await方法时,判断state是否大于0,大于0则进行doAcquireSharedInterruptibly方法。将当前线程打包成node对象。在往队列存入的时候,默认会往队列中放入一个Node对象(#2),再将当前线程作为后一个节点加入队列。在自旋中判断是否前一个节点为head,再次判断state是否大于0,大于则进入阻塞(#3)。释放调用countDown,通过cas尝试修改标致位,如果标志位为0,则唤醒等待的线程(#4)




