📅  最后修改于: 2023-12-03 15:01:50.735000             🧑  作者: Mango
Java中的原子类型(AtomicType)是为了解决多线程并发访问竞争资源的一种基于CAS原理的高效方式。其中,AtomicReference是一种能够原子性地更新对象的引用的类。
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()保证对象引用只能修改一次。