【发布时间】:2012-07-27 16:12:35
【问题描述】:
我有一些关于 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));
}
在这段代码sn-p中,jvm如何知道AccessStatistics的哪些字段要在compareAndSet()中进行比较?事实上,我只是想知道这整个策略是如何工作的,因为 java 根本不允许覆盖 ==?
感谢任何 cmets!
【问题讨论】:
-
这是一个非常相似的问题,即使是同样的例子:stackoverflow.com/questions/1869959/…
标签: java concurrency atomicreference