首页 > 解决方案 > 在 AtomicInteger.incrementAndGet() 的 CompareAndSwap 中比较比较什么?

问题描述

我知道 CompareAndSwap 在 java 并发中的 AtomicInteger.incrementAndGet() 等方法的引擎盖下使用,它像无限循环一样工作,直到它成功并阻止它的线程

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

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

标签: javaconcurrencyatomiccompare-and-swap

解决方案


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

如果成功,2将被退回。

否则,它将检索最新的值,比如说它x,并递增到x + 1给定的值。

...

此过程将继续进行,直到成功比较。


推荐阅读