标签:concurrency java
我需要保证java.util.concurrent.CountDownLatch.countDown()是原子的.
我在finally块中调用countDown,所以我确信自己使用正确.尽管偶尔我会看到一两个出色的闩锁,但我认为应该没有一个.
(我还没有通过检查Java源代码来进行验证.)
解决方法:
I need reassurance that java.util.concurrent.CountDownLatch.countDown() is atomic.
我向您保证,这绝对是原子的.如果不是的话,那将是一个严重的错误.我希望您在调试代码时会发现代码问题.
(I haven’t managed to verify by checking the Java source code.)
这是代码跟踪:
public void countDown() {
sync.releaseShared(1);
}
同步的默认实现是:
public 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;
}
}
compareAndSetState调用,该调用使用支持AtomicInteger和许多其他类的相同Unsafe类.
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
如果它被破坏了,那么java.util.concurrent的很大一部分将被破坏.
标签:concurrency,java 来源: https://codeday.me/bug/20191030/1970724.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。