java.util.concurrent.CountDownLatch.countDown()
我需要原子性的保证。
我正在调用块countDown
,finally
所以我确信我正确使用它。尽管我认为应该没有,但偶尔会看到一两个出色的闩锁。
(我还没有通过检查 Java 源代码来验证。)
java.util.concurrent.CountDownLatch.countDown()
我需要原子性的保证。
我正在调用块countDown
,finally
所以我确信我正确使用它。尽管我认为应该没有,但偶尔会看到一两个出色的闩锁。
(我还没有通过检查 Java 源代码来验证。)
我需要保证 java.util.concurrent.CountDownLatch.countDown() 是原子的。
我向你保证,它绝对是原子的。如果不是,这将是一个严重的错误。如果您调试代码,我希望您会发现代码问题。
(我还没有通过检查 Java 源代码来验证。)
这是代码跟踪:
public void countDown() {
sync.releaseShared(1);
}
默认实现sync
是:
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
调用它使用Unsafe
支持 theAtomicInteger
和许多其他类的相同类。
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
如果它坏了,那么很大一部分java.util.concurrent
都坏了。
它是一个数据结构的事实java.util.concurrent
是一个死的赠品,但是Java 代码使用AbstractQueuedSynchronizer
有助于实现原子操作的,一旦你阅读了队列同步器的 API,实现就非常简单了。这绝对是原子的:-)