CountDownLatch的await方法调用的是同步器的acquireSharedInterruptibly方法,里面判断了state是否为0,非0时构造等待节点通过cas轮询的方式加入等待队列尾部。接着在循环中判断前驱节点是否为头节点,是的话判断state是否为0,是的话将自己设置为头节点,并调用doReleaseShared方法将下一个节点唤醒。否则的话通过LockSupport的park方法阻塞住线程。
countDown调的是同步器的releaseShared方法,里面通过cas轮询将state减1,state为0时调用doReleaseShared方法将头节点的下一个节点唤醒。