AtomicStampedReference类

mac2024-03-29  41

    AtomicStampedReference 类维护了一个对象的引用reference 和一个整型值stamp,这两个值可以原子性地进行更新。     AtomicStampedRederence 类的定义:     public class AtomicStampedReference<V> extends Object     构造方法如下:     AtomicStampedReference(V initialValue,int initialStamp)     表示使用初始值initialRef 和 初始stamp值 initialStamp对该类进行初始化。

    ABA问题出现原因在于原子操作过程中没有对原子操作的过程进行管理,使用AtomicStampedReference类的stamp对原子操作过程进行标记,每一次操作增加一个版本号,用于记录原子操作的过程。          Demo 示例:     public class ABAThread extends Thread{         AtomicStampedReference<Integer> asr ;         public ABAThread( AtomicStampedReference<Integer> asr){             this.asr = asr;         }         public void run(){             asr.compareAndSet(0,1,asr.getStamp(),asr.getStamp()+1);             System.out.println("已经将值由0改变为1");             asr.compareAndSet(1,0,asr.getStamp(),asr.getStamp()+1);             System.out.println("已经将值有1改变为0");         }     }     public class NormalThread extends Thread{         AtomicStampedReference<Integer> asr;         public Normal(AtomicStampedReference<Integer> asr){             this.asr = asr;         }         public void run(){             int stamp = asr.getStamp();             System.out.println("Normal线程的Stamp的值:"+ stamp);             System.out.println("此时的stamp的值为:"+asr.getStamp());             try{                 sleep(1000);             }catch(InterruptedException e){                 e.printStackTrace();             }             //此处该原子操作已经改变了版本号, 判断条件为:false             if(asr.compareAndSet(0,1,stamp,stamp+1)){                 System.out.println("更新成功!");             }else{                 System.out.println("更新失败");             }         }     }     public class Index{         public static  void main( String []  agrs){             AtomicStampedReference<Integer> asr = new AtomicStampedReference<Integer>(0,0);             ABAThread abaThread = new ABATread(asr);             NormalThread normalThread = new NormalThread(asr);             normalThread.start();             abaThread.start();         }         }

最新回复(0)