Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较AtomicInteger而不设置它_Java - Fatal编程技术网

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");