【发布时间】:2012-10-04 20:53:05
【问题描述】:
我需要执行以下操作:
// average, total, elapsed are Long's
average = ( ( total * average ) + elapsed ) / (++total);
但我想用AtomicLong
这是我正在尝试的,但我不太明白它是否正确:
average.set( (( total.get() * average.get() ) + elapsed) / total.getAndIncrement() );
如何判断这是否正确?
【问题讨论】:
-
你正在做的是
... / (total++)。那是你要的吗?即,您在示例操作中增加了AtomicLong而不是total。 -
哦,是的,total++ 这就是我想要的。嗯,我想我实际上需要 ++total。
-
那你要
total.incrementAndGet()。 -
在这种情况下,您不应该在同步块中执行此操作吗?
标签: java concurrency atomic atomic-long