CountDownLatch用来做多线程的计数器,用来等待所有线程执行完,计数器底层也是用的state,用来修改state数量,5个线程就是state=5; CountDownLatch也是实现了一个Sync内部类,
调用方法是countDown()和await()方法,有一个线程执行完了就执行countDown(),计数器-1,直到全部线程都执行完毕才会解除阻塞。
await阻塞,会把所有线程写入到CLH队列中,进行阻塞park.
线程执行完会调用countDown方法,调用tryReleaseShared自旋执行state-1操作,这个操作是cas原子操作,每次只有一个线程执行,如果修改state成功,会去唤醒CLH队列中第一个thread的node,就是移除一个node。