Java Compare at CompareAndSwap at AtomicInteger.incrementAndGet()比较什么?

Java Compare at CompareAndSwap at AtomicInteger.incrementAndGet()比较什么?,java,concurrency,atomic,compare-and-swap,Java,Concurrency,Atomic,Compare And Swap,我知道CompareAndSwap是在java concurrent中的AtomicInteger.incrementAndGet()等方法的保护下使用的,它的工作就像一个无休止的循环,直到它成功并阻塞了它的线程 它将内存位置的内容与给定值进行比较, 只有当它们相同时,才会修改该内存的内容 将位置设置为新的给定值。这是作为单个原子完成的 活动原子性保证计算新值 基于最新信息;如果该值已由更新 另一个线程在此期间,写入将失败。结果 操作必须指明是否执行了替换; 这可以通过简单的布尔响应(此变量)来

我知道CompareAndSwap是在java concurrent中的AtomicInteger.incrementAndGet()等方法的保护下使用的,它的工作就像一个无休止的循环,直到它成功并阻塞了它的线程

它将内存位置的内容与给定值进行比较, 只有当它们相同时,才会修改该内存的内容 将位置设置为新的给定值。这是作为单个原子完成的 活动原子性保证计算新值 基于最新信息;如果该值已由更新 另一个线程在此期间,写入将失败。结果 操作必须指明是否执行了替换; 这可以通过简单的布尔响应(此变量)来完成 通常称为比较和设置),或通过返回从 内存位置(不是写入其中的值)


因此,当一个线程看到当前值时,例如,
1
,它会将其作为
给定值
增加到
2
,并将
2
与当前内存中的实际值进行比较,那么它会在incrementAndGet()中增加给定值和内存位置的内容

如果成功,将返回
2

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

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

您编写了“并将2与当前时刻内存中的实际值进行比较”,那么内存中的实际值应该是什么才能满足线程的要求?2作为给定值是否意味着线程将2作为本地副本保留在其注册表中?如果它不稳定呢?