源码分析
countDownLatch()
构造方法中传入了一个int值,就是需要并发的线程数
进一步看是设置状态的值为count
countDown()
如果CountDownLatch中的state已经为0了,那么再次执行countDown跟没执行一样,这样await()就不会阻塞了。
await()
调用了AQS提供的获取共享锁并且允许中断的方法,AQS提供的获取共享锁并且允许中断的方法,最后将线程唤醒。
总结
CountDownLatch本身就好像一个计数器,可以让一个线程或多个线程等待其他线程完成后再执行。使用方法也非常的简单,大家自己去尝试即可。
在使用的过程中一定要注意计数器的释放的地方,跟我们之前讲过的ForkJoin实现等待的逻辑非常的相似,大家可以自己去对比一下试试。