在AtomicInteger.incrementAndGet()的CompareAndSwap处,Compare比较什么?

时间:2018-10-01 11:25:47

标签: java concurrency atomic compare-and-swap

我知道CompareAndSwap是在Java并发中像AtomicInteger.incrementAndGet()这样的方法使用的,它就像无休止的循环,直到成功并阻塞了线程为止

  

它将存储位置的内容与给定值进行比较,并且   仅当它们相同时,才修改该内存的内容   位置到新的给定值。这是作为单个原子完成的   操作。原子性保证新值的计算   基于最新信息;如果值已被更新   与此同时,另一个线程将导致写入失败。的结果   该操作必须表明它是否执行了替换;   这可以通过简单的布尔响应来完成(此变体   通常称为“比较设置”),或者返回从   内存位置(而不是写入的值)。

那么,给定值内存位置的内容在incrementAndGet()中是什么?

1 个答案:

答案 0 :(得分:1)

当一个线程看到当前值时,例如1,然后将其递增为2given value,并将2与内存中的实际值进行比较当前。

如果成功,将返回2

否则,它将检索最新值,例如x,并作为给定值增加到x + 1

...

此过程将一直持续到成功比较为止。