扩展的原子引用类型: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();
        }
    }
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值