2

在研究 AtomicInteger 时,我发现这个 API 提供了两种方法。

比较和交换

如果当前值(称为见证值)== expectedValue(具有由VarHandle.compareAndExchange(java.lang.Object...)

比较安集

以原子方式将值设置为newValueif 当前value == expectedValue,具有由 指定的记忆效果 VarHandle.compareAndSet(java.lang.Object...)

我无法理解两者之间的区别,请提供合适的示例。

4

1 回答 1

5

这两种方法具有不同的返回类型。

compareAndSet返回boolean

如果成功,则为真。False return 表示实际值不等于预期值。

compareAndExchange返回一个int

见证值,如果成功,它将与预期值相同

iecompareAndSet表示变量的值是否被更新,同时compareAndExchange返回变量的当前值,这可以为您提供更多信息。

compareAndSet(1,2)2如果前一个值是1,则将原子整数的值设置为 ,并true在这种情况下返回。否则,它不会设置值,它会返回false

compareAndExchange​(1,2)2如果前一个值是1,则将原子整数的值设置为 ,并1在这种情况下返回。如果之前的值不是1,则不会设置该值,而是返回当前(未更改的)值。

于 2020-03-12T06:28:41.543 回答