atomicReference示例

别等时光非礼了梦想. 提交于 2019-12-04 00:58:30

对引用类型的原子性操作

/**
 * 
   *      对引用变量的原子操作 note:
   *       在java中对引用类型的变量,赋值是原子性的,为什么还要有atomicReference,假如要对一个引用类型进行比较,设置等多于一个的操作,还要他们保证原子性时,就要用到
 *  atomicReference
 */
public class AtomicReferenceTest {

    public static void main(String[] args) {
        // 创建两个Person对象,它们的id分别是101和102。
        Person p1 = new Person(101);
        Person p2 = new Person(102);
        // 新建AtomicReference对象,初始化它的值为p1对象
        AtomicReference<Person> ar = new AtomicReference<Person>(p1);
        // 通过CAS设置ar。如果ar的值为p1的话,则将其设置为p2。
        if (ar.compareAndSet(p1, p2)) {
            System.out.println("设置成功");
        }
        Person p3 = (Person) ar.get(); // 取出来的是p2值
        System.out.println("p3 is " + p3);
        System.out.println("p3.equals(p1)=" + p3.equals(p1));
    }
}

class Person {
    volatile long id;

    public Person(long id) {
        this.id = id;
    }

    public String toString() {
        return "id:" + id;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!