- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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;
}
从调用者的角度来看?
最佳答案
不,这些不相等。不同之处在于 getAndSet
以原子方式执行两种操作,而不仅仅是一个原子 get 和一个原子 set。
getAndSet
总是保证返回 准确 存储在引用中的值就在设置新值之前。 volatile 版本可能会“跳过”其他线程插入的值。
关于java - Java AtomicReference#getAndSet 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63729807/
我有以下代码。显然,Reference 类不是线程安全的,因为它不保护其“引用”属性。我如何证明我需要通过例如原子引用来保护它? 当我运行以下 JUnit 测试时,它在 Windows:Intel(R
我有一个有关通过原子引用访问各个元素的问题。如果我有一个 IntegerArray 和对其的原子引用;通过 AtomicReference 变量读取和写入数组的各个元素是否会导致数据争用? 在下面的代
谁能给我解释一下: final AtomicReference atomicReference = new AtomicReference<>(1); atomicReference.set(2);
我正在使用一个在发送请求时需要回调的框架。每个回调都必须实现此接口(interface)。回调中的方法是异步调用的。 public interface ClientCallback { publi
我的情况有些特殊。我希望能够使用 AtomicReference 的 compareAndSet() 功能,但有一点改动。 通常,在实际更改之前,您会使用 compareAndSet() 与单个预期值
假设您有以下类(class) public class AccessStatistics { private final int noPages, noErrors; public Acces
所以在我为了好玩而写的各种程序中,都遇到过并发修改异常。 在我天真的尝试解决这个问题时,我使用了 Atomic 而不是某种并发集合。我有点熟悉为什么这是套管错误。本质上,ArrayList 的各个元素
我必须创建一个接受输入参数的单例。基本上我需要根据某些配置在库中创建一个 DBConnector 。现在,此配置由使用应用程序传递到库。根据传入的配置,我想创建一个 DBConnector 实例,然后
有什么方法可以实现一种引用类型,其值可以原子地与另一个交换? 在 Java 中,我们有 AtomicReference,它可以与局部变量交换,但不能与另一个 AtomicReference 交换。 你
Java 是否保证 线程 A 在将数组引用存储在 AtomicReference 之前对数组元素所做的更新将始终对 线程 B 获取此引用? 换句话说,执行此操作的可能输出是什么: class Refe
使用 AtomicReference 的惰性初始化单例的实现是否正确?如果不是 - 可能的问题是什么? import java.io.ObjectStreamException; import jav
我希望懒惰地创建一些东西并将结果缓存为优化。下面的代码是否安全高效,或者是否有更好的方法来做到这一点?这里需要比较和设置循环吗? ... AtomicReference fCachedValue =
假设我有一个 AtomicReference对象列表: AtomicReference> batch = new AtomicReference>(new ArrayList()); 线程 A 将元素
java AtomicReference 是如何工作的?我试着查看代码,但它是基于 sun.misc.Unsafe 的,所以可能另一个问题是 Unsafe 是如何工作的? 最佳答案 这是特定于当前实现
注意:这个问题与内存可见性有关,而不是“公共(public)”、“私有(private)”等。 假设我有以下类(class): public class Data { public final
我必须同步线程之间对共享对象的访问,该共享对象的状态由多个字段组成。说: class Shared{ String a; Integer b; //constructor, getters and s
什么相当于: AtomicReference ref = new AtomicReference( ... ); 但没有同步成本。请注意,我确实想将引用包装在另一个对象中。 我查看了扩展 Refere
我对 AtomicReference 有一个简单的一般性问题。 如果引用分配在 java 中是原子的,为什么要使用 AtomicReference? 另外我想问一下在 64 位 VM 中引用分配是否是
Java AtomicReference#getAndSet 的用例是什么?换句话说,如果我在代码中使用的来自 AtomicReference 的唯一方法是 AtomicReference#getAn
这个问题已经有答案了: Java volatile reference vs. AtomicReference (6 个回答) 已关闭 6 年前。 如果一个类有一个私有(private) Atomic
我是一名优秀的程序员,十分优秀!