Java AtomicReference#getAndSet的使用场景是什么?

3
什么是Java的AtomicReference.getAndSet用例?换句话说,如果我在我的代码中仅使用AtomicReference的方法是getAndSet,那么我的假设正确吗?也就是说,我根本不需要AtomicReference,只需要一个volatile变量就足够了吗?
例如,如果我有以下代码:
private final AtomicReference<String> string = new AtomicReference<>("old");

public String getAndSet() {
    return string.getAndSet("new");
}

它难道不总是做与

private volatile String string = "old";

public String getAndSet() {
    String old = string;
    string = "new";
    return old;
}

从呼叫者的角度来看?

1个回答

9
不,它们不是等价的。区别在于getAndSet会原子性地执行两个操作,而不仅仅是一个原子性获取和设置。 getAndSet始终保证返回在设置新值之前存储在引用中的确切值。而volatile版本可能会“跳过”其他线程插入的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接