gpt4 book ai didi

java - java.util.concurrent.CountDownLatch.countDown() 是原子的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:53 25 4
gpt4 key购买 nike

我需要保证 java.util.concurrent.CountDownLatch.countDown() 是原子的。

我在 finally block 中调用 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);
}

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 调用使用支持 AtomicInteger 和许多其他类的相同 Unsafe 类。

return unsafe.compareAndSwapInt(this, stateOffset, expect, update);

如果它被破坏,那么很大一部分 java.util.concurrent 被破坏。

关于java - java.util.concurrent.CountDownLatch.countDown() 是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16966138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com