java atomicreference#getandset的用例是什么?

sxissh06  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(357)

java的用例是什么 AtomicReference#getAndSet ? 换言之,如果唯一的方法 AtomicReference 我在代码中使用的是 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;
}

从来电者的Angular 看?

yks3o0rb

yks3o0rb1#

不,这些不是等价的。不同的是 getAndSet 这两个操作都是原子化的,而不仅仅是一个原子get和一个原子集合。 getAndSet 始终保证精确返回在设置新值之前存储在引用中的值。易失性版本可能会“跳过”其他线程插入的值。

相关问题