gpt4 book ai didi

java - AtomicInteger 的 getAndIncrement 实现

转载 作者:行者123 更新时间:2023-11-30 08:29:03 26 4
gpt4 key购买 nike

AtomicInteger 的 getAndIncrement 实现执行以下操作:

public final int getAndIncrement() {
for (;;) {
int current = get(); // Step 1 , get returns the volatile variable
int next = current + 1;
if (compareAndSet(current, next))
return current;
} }

它不是等同于aVolatileVariable++吗? (我们知道这不是正确的用法)。没有同步,我们如何确保这个完整的操作是原子的?如果在步骤 1 中读取变量 'current' 后 volatile 变量的值发生变化怎么办?

最佳答案

“秘方”就在这个调用中:

compareAndSet(current, next)

compareAndSet如果原始 volatile 值在读取后 被同时更改,操作将失败(并返回 false),迫使代码继续循环。

关于java - AtomicInteger 的 getAndIncrement 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765127/

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