Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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 有什么区别?_Java_Multithreading_Atomic - Fatal编程技术网

Java 有什么区别?

Java 有什么区别?,java,multithreading,atomic,Java,Multithreading,Atomic,你能解释一下两者的区别吗 i.compareAndSet(i.get(), i.get() + 1) 及 其中,i是一个AtomicInteger。如果我想得到I的增量值,那么第一种方法是错误的,对吗?但是我无法解释原因。第一种方法调用了I.get()两次。由于这里没有锁定,这两个调用可能返回不同的值,这可能不是您所期望的 我想得到int的下一个值 那么您可能根本不想要compareAndSet,您想要: 或者,如果要更新之前的值,请执行以下操作: previous = i.getAndUpd

你能解释一下两者的区别吗

i.compareAndSet(i.get(), i.get() + 1)


其中,
i
是一个
AtomicInteger
。如果我想得到
I
的增量值,那么第一种方法是错误的,对吗?但是我无法解释原因。

第一种方法调用了
I.get()
两次。由于这里没有锁定,这两个调用可能返回不同的值,这可能不是您所期望的


我想得到int的下一个值

那么您可能根本不想要
compareAndSet
,您想要:

或者,如果要更新之前的值,请执行以下操作:

previous = i.getAndUpdate(value -> value + 1);

“错”在哪方面?这取决于你想要实现什么!它们是不同的,但这并不意味着其中一个是错的,另一个是对的。这完全取决于你想要什么样的最终结果。它可以是第一个,第二个,或者完全是别的什么。我想得到int的下一个值。
updated = i.updateAndGet(value -> value + 1);
previous = i.getAndUpdate(value -> value + 1);