您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页扩展的原子引用类型:AtomicMarkableReference

扩展的原子引用类型:AtomicMarkableReference

来源:筏尚旅游网


    AtomicMarkableReference类是一个线程安全的类,该类封装了一个对象的引用reference和一个布尔值mark,可以原子性地对这两个值进行更新。
    定义:
    public class AtomicMarkableReference<V> exntends Object
    其中,V为需要标记的原子操作的类型。
    该类的构造方法如下:
    AtomicMarkableReference( V initialValue,boolean initialMark)
    该构造方法使用给定的初始值引用reference和mark进行赋值。
    例如:定义一个初始值为null,未标记的AtomicMarkReference对象:
    AtomicMarkableReference<node> amf = new AtomicMarkableReference<Node>(null,false);
    其中,Node为自定义类。 
    
    Demo示例:
    public class Worker extends Thread{
        AtomicMarkableReference<Integer> amr;
        public Worker(AtomicMarkableReference amr,String name){
            this.amr = amr;
            Thread.currentThread().setName(name);
        }
        public void run(){
            String name = Thread.currentThread().getName();
            System.out.println("线程"+name +"读到原子标记的初始化值为:"+amr.isMarked() );

            //boolean compareAndSet(V expectedReference, V  newReference,boolean excpectedMark,boolean newMark)
            //如果当前引用Reference 和 expectedReference相同,并且当前标记mark值和期望mark值相同,则原子更新引用和标记为新值newReference 和 newMark
            if(amr.compareAndSet(0,1,false,true)){
                System.out.println("线程"+name + "操作的原子当前值为:"+ amr.isMarked());
                System.out.println("线程"+name+"正在将原子标记的值由0设置为1");
            }else{
                System.out.println("线程"+name+"原子操作没有成功");
            }
        }
    }

    public class Index{
        public static void main(String [] args){
             AtomicMarkableReference<Integer> amr = new AtomicMarkableReference<Integer>(0,false);
            Thread ta = new Worker(amr,"A");
            Thread tb = new Worker(amr,"B");
            ta.start();
            tb.start();
        }
    }
 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务