CountDownLatch
来源:互联网 发布:淘宝天猫订单无法评价 编辑:程序博客网 时间:2024/06/17 15:25
http://ifeve.com/talk-concurrency-countdownlatch/
实现原理
CountDownLatch内部实现了一个AQS的实例Sync,CountDownLatch的初始化容量为state状态值,调用countdown时,会转而调用sync.releaseShared(1),state状态减一,而调用await()时,则转而调用sync.acquireSharedInterruptibly(1),Sync的tryAcquireShared()实现如下所示。由代码可知,只有state状态为0时,才会获取锁成功。
private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L; Sync(int count) { setState(count); } int getCount() { return getState(); } protected int tryAcquireShared(int acquires) { return (getState() == 0) ? 1 : -1; } protected boolean tryReleaseShared(int releases) { // Decrement count; signal when transition to zero for (;;) { int c = getState(); if (c == 0) return false; int nextc = c-1; if (compareAndSetState(c, nextc)) return nextc == 0; } }}
0 0
- CountDownLatch
- CountDownLatch
- CountDownLatch
- Countdownlatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch,
- CountDownLatch
- vim配置
- 乱七八糟的
- kali安装并换源
- 深入PHP面向对象、模式与实践——执行及描述任务(2)
- 不装逼地说,在 Google 到底能学到啥?
- CountDownLatch
- java 与 matlab 的一些感想
- Docker基础入门及示例
- c语言之八进制转二进制
- 蓝桥杯_2016年第七届C/C++B组—6.方格填数 【DFS】
- 网站项目部署服务器路径设置问题
- 泛型类
- C++ — 关于菱形虚拟继承对象模型的探究
- 编写高效率的C#代码