CountDownLatch 源码分析
程序员文章站
2022-07-12 19:34:10
...
思路分析:
CountDownLatch 的思路是:首先申请锁的时候,假设以 6 申请锁. 此时线程阻塞. 参考独占锁中的重入锁.
此时:假设一个独占锁多次申请锁的话,那么假设此时 state = 6.
这时候就跟共享锁初始的时候申请锁差不多了.
现在每调用一次 countDown 方法的时候,state -1
当 state = 0 的时候,是不是说明没有再占用锁了?那么此时线程就可以执行了.
CountDownLatch 的实现思路从始至终只有一个线程在队列中,也就是主线程.
它的 countDown 方法只是将 state 减一. 当 count=0时,调用 doReleaseShared 方法释放锁.
而他的 await 方法从始至终就是一个线程在自旋,然后自我阻塞. 然后 await 方法返回,继续执行.
CountDownLatch 的思路是:首先申请锁的时候,假设以 6 申请锁. 此时线程阻塞. 参考独占锁中的重入锁.
此时:假设一个独占锁多次申请锁的话,那么假设此时 state = 6.
这时候就跟共享锁初始的时候申请锁差不多了.
现在每调用一次 countDown 方法的时候,state -1
当 state = 0 的时候,是不是说明没有再占用锁了?那么此时线程就可以执行了.
CountDownLatch 的实现思路从始至终只有一个线程在队列中,也就是主线程.
它的 countDown 方法只是将 state 减一. 当 count=0时,调用 doReleaseShared 方法释放锁.
而他的 await 方法从始至终就是一个线程在自旋,然后自我阻塞. 然后 await 方法返回,继续执行.