比较AtomicInteger而不设置它

时间:2015-09-30 11:37:24

标签: java

如何在不将AtomicInteger设置为新值的情况下将int与给定AtomicInteger值进行比较?我在AtomicInteger中没有看到这样的方法。

2 个答案:

答案 0 :(得分:7)

  

当get()返回时,AtomicInteger中的值可能会更新为新值...所以我可能会得到一个陈旧的值

根据定义,如果原子整数中的值在您调用int i = atomic.get()后立即更新,则i中将包含过时值。但这就是并发程序的工作原理 - 当你查阅一个值时,你知道它可能已经发生了变化。

AtomicInteger::get保证,当您拨打电话时,您将获得通话时的最新值。例如,您可以使用普通int来保证。

换句话说,想象下面的程序:

if (atomic.get() == 0) print("zero");

即使你有某种compareButNotSet方法,它也无济于事,因为当你到达print语句时,原子的值可能已经改变了......

如果您需要确保仅在值仍为0时调用print,则需要同步(或使用锁定)整个块。

答案 1 :(得分:4)

你有get()方法

  

获取当前值。

Returns:
the current value

您不必担心同步部分,因为您在特定点进行比较。