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

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

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

AtomicReference 简介

Java中的原子类型(AtomicType)是为了解决多线程并发访问竞争资源的一种基于CAS原理的高效方式。其中,AtomicReference是一种能够原子性地更新对象的引用的类。

AtomicReference compareAndExchange() 方法

AtomicReference compareAndExchange() 方法是该类中用于比较并交换引用对象的方法。该方法的定义如下:

public final boolean compareAndExchange(V expectedValue, V newValue)

该方法的作用是:比较当前对象的值和期望值(expectedValue),如果相等则用新值(newValue)替换当前对象的值,并返回true;如果不相等则不做替换操作,返回false。

示例

下面给出一个使用AtomicReference compareAndExchange() 方法的示例:

import java.util.concurrent.atomic.AtomicReference;

public class AtomicReferenceDemo {
    private static AtomicReference<String> username = new AtomicReference<>("example");

    public static void main(String[] args) {
        System.out.println("初始值: " + username.get());

        boolean success = username.compareAndSet("example", "newName");
        if (success) {
            System.out.println("成功修改: " + username.get());
        } else {
            System.out.println("修改失败: " + username.get());
        }

        success = username.compareAndSet("example", "newName2");
        if (success) {
            System.out.println("成功修改: " + username.get());
        } else {
            System.out.println("修改失败: " + username.get());
        }
    }
}

运行结果如下:

初始值: example
成功修改: newName
修改失败: newName

从输出结果可以看到,第一次compareAndSet()成功地将原始值修改为了新值,而第二次执行则由于原始值已经被修改,因此修改失败。因此,可以使用compareAndSet()保证对象引用只能修改一次。