Java 比较AtomicInteger而不设置它
如何在不将Java 比较AtomicInteger而不设置它,java,Java,如何在不将AtomicInteger设置为新值的情况下,将AtomicInteger与给定的int值进行比较?我在AtomicInteger中没有看到这样的方法 你有办法吗 获取当前值 您不必担心同步部分,因为您可以在特定点比较它 当get()返回时,AtomicInteger中的值可能会更新为新值。。。所以我可能会得到一个过时的值 根据定义,如果在调用int i=atomic.get()之后立即更新原子整数中的值,则i中将有一个过时的值。但这正是并发程序的工作方式——当您参考一个值时,您知道它
AtomicInteger
设置为新值的情况下,将AtomicInteger
与给定的int
值进行比较?我在AtomicInteger
中没有看到这样的方法 你有办法吗
获取当前值
您不必担心同步部分,因为您可以在特定点比较它
当get()返回时,AtomicInteger中的值可能会更新为新值。。。所以我可能会得到一个过时的值
根据定义,如果在调用int i=atomic.get()
之后立即更新原子整数中的值,则i
中将有一个过时的值。但这正是并发程序的工作方式——当您参考一个值时,您知道它可能已经改变了
AtomicInteger::get
保证的是,当您调用它时,您将获得调用时可用的最新值。例如,使用普通int
时无法获得的保证
换句话说,想象一下下面的程序:
if (atomic.get() == 0) print("zero");
即使您有某种compareButNotSet
方法,也不会有帮助,因为当您到达print语句时,atomic的值可能已经改变了
如果您需要确保仅当值仍然为0时才调用print,则需要同步(或使用锁)整个块。get()有什么问题?@biziclop好吧,这就是我现在使用的,但我认为当
get()
返回时,AtomicInteger中的值可能会更新为新值。。。所以我可能会得到一个过时的值?@peter.petrov,比较可能是同步的?@sᴜʀᴇsʜᴀᴛᴛᴀ 但问题是,我不想让自己同步。如果我这样做,那么好吧,我知道怎么做,但我不再需要AtomicInteger,因为我将自己同步它。我认为AtomicInteger的get
也将是原子的??我错了吗?嗯,这是不是意味着我最好自己同步?我想做一个原子比较,它保证值在比较时不会改变。就这些。嗯,好吧,好吧。。。我有点失望:)因为我不知怎么地期待着别的东西。。。但是谢谢。@peter.petrov为什么?你要么在比较后做一些仍然要求值相同的事情(->同步整个块),要么不做,在这种情况下,“值在比较时不改变”根本没有意义。我猜我不知怎么地期望get和set是阻塞方法,或者说内部同步。差不多吧。但即使如此,正如你的例子所说,它也没有帮助。我只是有点困惑,我明白了。我明白你的意思,但是。。。我认为这不是那么简单。为什么在AtomicInteger中会有这些比较方法,如果我们都应该只使用get()?嗯,好吧。。。我有点失望:)因为我不知怎么地期待着别的东西。。。但是谢谢。
if (atomic.get() == 0) print("zero");