美文网首页
CountDownLatch源码分析

CountDownLatch源码分析

作者: SnailFast | 来源:发表于2019-09-16 22:01 被阅读0次

整体概况

        CountDownLatch的代码很简洁,主要方法就两个,一个是阻塞方法await,一个是解锁方法countDown,这两个方法都是利用内部的同步器对状态变量的控制来实现的,整体源码结构如下图所示。

CountDownLatch源码概况

初始化

        CountDownLatch的构造方法就是给状态变量初始化,状态变量的值代表资源的个数。如下图所示

CountDownLatch的构造方法

await方法

        CountDownLatch的await方法是通过AQS的acquireSharedInterruptibly方法实现的,acquireSharedInterruptibly方法内部通过调用tryAcquireShared方法来判断是否获取锁成功,而tryAcquireShared方法是抽象的,需要子类重写,CountDownLatch里面的Sync正是通过重写通过判断状态变量是否为0来判断是否获取锁成功。如下图所示。

await源码 tryAcquireShared源码

countDown方法

        countDown借助AQS的releaseShared方法来释放资源,而AQS的releaseShared方法会调用子类的tryReleaseShared方法。Sync的tryReleaseShared方法很简单,就是利用CAS将状态变量的值加1,并且把这个操作放在死循环里面,确保状态变量的值成功加1。如下图所示。

countDown源码 AQS的releaseShared源码 Sync的tryReleaseShared源码

相关文章

网友评论

      本文标题:CountDownLatch源码分析

      本文链接:https://www.haomeiwen.com/subject/wcokyctx.html