如何在不将AtomicInteger
设置为新值的情况下将int
与给定AtomicInteger
值进行比较?我在AtomicInteger
中没有看到这样的方法。
答案 0 :(得分:7)
当get()返回时,AtomicInteger中的值可能会更新为新值...所以我可能会得到一个陈旧的值
根据定义,如果原子整数中的值在您调用int i = atomic.get()
后立即更新,则i
中将包含过时值。但这就是并发程序的工作原理 - 当你查阅一个值时,你知道它可能已经发生了变化。
AtomicInteger::get
保证,当您拨打电话时,您将获得通话时的最新值。例如,您可以使用普通int
来保证。
换句话说,想象下面的程序:
if (atomic.get() == 0) print("zero");
即使你有某种compareButNotSet
方法,它也无济于事,因为当你到达print语句时,原子的值可能已经改变了......
如果您需要确保仅在值仍为0时调用print,则需要同步(或使用锁定)整个块。
答案 1 :(得分:4)