比较AtomicInteger而不设置它

pet*_*rov 5 java

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

ass*_*ias 8

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

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

什么AtomicInteger::get保证,当你打电话时,你将获得通话时的最新价值.int例如,平原上没有的保证.


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

if (atomic.get() == 0) print("zero");
Run Code Online (Sandbox Code Playgroud)

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

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


Sur*_*tta 5

你有get()办法

获取当前值。

Returns:
the current value
Run Code Online (Sandbox Code Playgroud)

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