gpt4 book ai didi

java - AtomicLong 可能出现竞争条件吗?

转载 作者:行者123 更新时间:2023-12-01 06:37:37 25 4
gpt4 key购买 nike

我知道可能的竞争条件是读取-修改-写入,例如:

public class UnsafeSequence {
private int value;
public int getNext(){
value = value + 1;
return value;
}
}

在我的代码中我使用 AtomicLong:

public class Test {
private AtomicLong size = new AtomicLong();

public void test(Object myPersonalObject){
//do something

this.size.set(this.size.get() + myPersonalObject.getSize().get());


//do something
}
}

myPersonalObject.getSize() 返回一个 AtomicLong。

问题是:这个指令 this.size.set(this.size.get() + myPersonalObject.getSize().get()); 会产生竞争条件吗?

最佳答案

AtomicLong 保证 get() 的结果将是相应对象的“正确”内容(而不是值的“一半”是一个值)旧值,另一半来自"new"值)。

所以,当然:AtomicLong 对象的“内部”值可以在您的代码中很好地改变。您首先获取它的值,添加一些内容,然后写回该值。

换句话说:当您担心总是 set() 一个正确值(无论在您的上下文中意味着什么)时 - 那么您的实现并不能保证!

因此:您可能希望在此处使用普通的 long - 而不是使用 AtomicLong,您的代码提供必要的同步来维护此“计数器”周围的合约

关于java - AtomicLong 可能出现竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998325/

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