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版本号控制手动实现原子计数的主要内容,如果未能解决你的问题,请参考以下文章