gpt4 book ai didi

java - 原子长操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:42 27 4
gpt4 key购买 nike

我需要执行以下操作:

// average, total, elapsed are Long's

average = ( ( total * average ) + elapsed ) / (++total);

但是我想用AtomicLong

这是我正在尝试的,但我不太明白它是否正确:

 average.set( (( total.get() * average.get() ) + elapsed) / total.getAndIncrement() );

我如何判断这是否正确?

最佳答案

推测您正在使用 AtomicLong,因为这些数字正在被同时访问。由于涉及两个数字,并且在同一语句中同时使用 get 和 incrementAndGet,因此我认为 AtomicLong 不是正确的选择。

我发现 AtomicXXX 在很多情况下都非常有用。但在这里,我认为你需要用艰难的方式来做。让您的数字成为简单的“长”私有(private)变量,创建一个守卫对象,然后确保在您访问数字时在守卫对象上进行同步。

我认为这是您可以确定这些操作是真正原子操作的唯一方法。

关于java - 原子长操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735739/

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