根据文档,我对 AtomicReference.compareAndSet() 方法有一些疑问,它说:
如果当前值 == 预期值,则自动将值设置为给定的更新值。
据我了解,==
运算符正在比较两个对象的地址,如果是这样,它将如何在这样的示例中工作
private AtomicReference<AccessStatistics> stats =
new AtomicReference<AccessStatistics>(new AccessStatistics(0, 0));
public void incrementPageCount(boolean wasError) {
AccessStatistics prev, newValue;
do {
prev = stats.get();
int noPages = prev.getNoPages() + 1;
int noErrors = prev.getNoErrors;
if (wasError) {
noErrors++;
}
newValue = new AccessStatistics(noPages, noErrors);
} while (!stats.compareAndSet(prev, newValue));
}
在这段代码片段中,jvm 如何知道AccessStatistics
要在compareAndSet()
? 事实上,我只是想知道这整个策略是如何工作的,因为 java 根本不允许覆盖==
?感谢您的任何评论!