CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数

Posted 可——叹——落叶飘零

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数相关的知识,希望对你有一定的参考价值。

原子计数可以直接使用AtomicInteger
下面采用AtomicStampedReference的版本号控制原子操作解决ABA问题
最终结果一定最大的是200000
1A->2B->3A

public class AtomicReferenceMain 
    static volatile int  i=0;
    private static AtomicStampedReference<Integer> asr=new AtomicStampedReference<>(i,1);
    public static void main(String[] args) throws InterruptedException 
        AtomicInteger a=new AtomicInteger(0);
        MyRunnable mr=new MyRunnable();
        List<Thread> list=new ArrayList<>(20);
        for (int j=0;j<20;j++)
            list.add(new Thread(mr));
        
        for (Thread thread : list) 
            thread.start();
        
    
    private static class MyRunnable implements Runnable
        @Override
        public void run() 
            for (int j=0;j<10000;j++)
                for (;;)
                //参数:期望值,新值,期望版本号,新版本号
                    boolean b = asr.compareAndSet(asr.getReference(), asr.getReference()+1, asr.getStamp(), asr.getStamp() + 1);
                    if(b)
                        break;
                    
                
            
            System.out.println(asr.getReference());
        
    

以上是关于CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数的主要内容,如果未能解决你的问题,请参考以下文章

CAS乐观锁悲观锁讲解

乐观锁实现之CAS算法分析

CAS 与原子操作

Java的CAS乐观锁原理解析

CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数

CAS乐观锁使用AtomicStampedReference版本号控制手动实现原子计数