AtomicReference explanation of high concurrent programming [java class]

1. Introduction to AtomicReference


        ①.AtomicReference is very similar to AtomicInteger, the difference is that AtomicInteger is an encapsulation of integers, while AtomicReference corresponds to ordinary object references. That is, it can guarantee thread safety when you modify object references.

        ②.AtomicReference is used to perform atomic operations on "objects". Provides an object reference variable whose reading and writing are atomic. Atomic means that multiple threads attempting to mutate the same AtomicReference (such as compare and exchange operations) will not leave the AtomicReference in an inconsistent state.

2. Example of use

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());

    }
}

Guess you like

Origin blog.csdn.net/m0_60252632/article/details/123117514