CAS的ABA问题的理解

假设有3个线程对同一个资源进行操作,线程1期望数据为A才能操作成功,此时线程被2持有,将A改为B;紧接着线程被3持有,又将B改为A;最终,线程1占有资源时,预期的数据是A,于是进行了操作;
但此时的A与初期的A并非同一个数据,对于只注重头尾数据的业务,这并没有什么太大的问题,但某些业务需要记录且区分数据整个的变化过程,则会产生较大影响;
最简单的方案:

1、新增版本号,每修改一次数据都对版本号进行更新,当且仅有预期值与版本号都正确的情况下才进行操作

2、使用AtomicStampedReference进行CAS的比较,其内部除了维护内存对象,还维护了一个时间戳版本号,与方法1类似;

posted @ 2020-10-14 23:55  老YAN  阅读(102)  评论(0编辑  收藏  举报