高并发编程之AtomicReference讲解【java类】

一、AtomicReference介绍


        ①.AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是它可以保证你在修改对象引用时的线程安全性。

        ②.AtomicReference是作用是对”对象”进行原子操作。 提供了一种读和写都是原子性的对象引用变量。原子意味着多个线程试图改变同一个AtomicReference(例如比较和交换操作)将不会使得AtomicReference处于不一致的状态。

二、使用示例

import java.util.concurrent.atomic.AtomicReference;

/**
 * @author qingnianren
 */

public class AtomicReferenceTest {

    public static void main(String[] args) {

        User zs = new User("张三", 22);
        User ls = new User("李四", 24);
        User ww = new User("王五", 27);

        AtomicReference<User> userAtomicReference = new AtomicReference<>(new User());
        userAtomicReference.set(zs);
        // User(name=张三, age=22)
        System.out.println("第一次赋值==" + userAtomicReference.get());

        // 如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值

        boolean result = userAtomicReference.compareAndSet(zs, ls);
        // true(由于zs == zs)
        System.out.println("结果==" + result);
        // User(name=李四, age=24)
        System.out.println("第二次赋值==" + userAtomicReference.get());

        boolean result2 = userAtomicReference.compareAndSet(zs, ww);
        // false(由于ls != zs)
        System.out.println("结果==" + result2);
        // User(name=李四, age=24)
        System.out.println("第三次赋值==" + userAtomicReference.get());

        boolean result3 = userAtomicReference.compareAndSet(ls, ww);
        // true(由于ls == ls)
        System.out.println("结果" + result3);
        // User(name=王五, age=27)
        System.out.println("第四次赋值==" + userAtomicReference.get());

    }
}

猜你喜欢

转载自blog.csdn.net/m0_60252632/article/details/123117514