📌  相关文章
📜  Java中的 AtomicReference compareAndSet() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:01:50.737000             🧑  作者: Mango

Java中的 AtomicReference compareAndSet() 方法及示例

Java中的原子操作可以保证多线程环境下变量的线程安全,其中AtomicReference是一种原子引用数据类型,它可以支持引用类型变量的原子操作,其中最常用的方法就是compareAndSet()方法。

AtomicReference的compareAndSet()方法

AtomicReference类的compareAndSet()方法是一种原子性的比较与替换操作。它接受两个参数oldValue和newValue,它会对当前的AtomicReference对象进行比较,如果当前的对象引用与oldValue相等,则用newValue更新这个引用,否则不会进行任何操作。

这个方法会返回一个布尔值,表示是否成功更新了该对象的引用。

public class AtomicReferenceDemo<T> {
    private AtomicReference<T> atomicReference = new AtomicReference<>();

    public void setValue(T value) {
        atomicReference.set(value);
    }
  
    public boolean compareAndSet(T oldValue, T newValue) {
        return atomicReference.compareAndSet(oldValue, newValue);
    }
}

在上面的代码中,我们使用了一个泛型类AtomicReferenceDemo,其中包含AtomicReference对象及其相关方法。setValue()方法通过原子操作更新AtomicReference对象的引用值;compareAndSet()方法使用CAS算法(Compare and Swap)比较并替换AtomicReference对象的引用值。

示例

下面是一个简单的例子来演示如何使用AtomicReference的compareAndSet()方法。

public class AtomicReferenceExample {
    AtomicReference<String> atomicReference = new AtomicReference<>("Hello");

    public void updateValue(String value) {
        boolean isUpdated = atomicReference.compareAndSet("Hello", value);
        if (isUpdated) {
            System.out.println("AtomicReference value updated successfully");
        } else {
            System.out.println("AtomicReference value update failed");
        }
    }

    public static void main(String[] args) {
        AtomicReferenceExample example = new AtomicReferenceExample();
        example.updateValue("World");
    }
}

在上面的代码中,我们创建了一个AtomicReference对象,并将其初始值设置为"Hello"。然后我们使用updateValue()方法,将其更新为"World"。在该方法中,我们调用了compareAndSet()方法检查当前对象是否是"Hello"。因为当前对象的值确实是"Hello",因此更新操作会成功,并且"World"将成为新的引用值。最终的输出将是"AtomicReference value updated successfully"。