有什么不同?

Ann*_*nna 3 java multithreading atomic

你能解释一下我之间的区别吗?

i.compareAndSet(i.get(), i.get() + 1)
Run Code Online (Sandbox Code Playgroud)

int s = i.get();
int nextS = s + 1;
i.compareAndSet(s, nextS);
Run Code Online (Sandbox Code Playgroud)

这里i是一个AtomicInteger.我是对的,如果我想获得增量值,第一种方式是错误的i吗?但我无法解释原因.

Mur*_*nik 5

第一种方式叫i.get()两次.由于此处没有锁定,因此两个调用可能会返回不同的值,这可能与您的预期不同.