CAS造成ABA问题解决方案

package Interview;

import java.util.concurrent.atomic.AtomicStampedReference;

/**
 * @Description : ABA问题解决
 */
public class ABA {

    static AtomicStampedReference<Integer> atomicInteger;

    public static void main(String[] args) throws InterruptedException {
        int j = 0;
//        创建10个线程
        while (j < 10) {
//            创建原子整数,初始值是0,时间戳是0
            atomicInteger = new AtomicStampedReference<>(0, 0);

            Thread thread1 = new Thread(() -> {

                for (int i = 0; i < 100; i++) {

                    int stamp;
                    Integer reference;

                    do {
//                   预期时间戳
                        stamp = atomicInteger.getStamp();

//                   预期初始值
                        reference = atomicInteger.getReference();

//                  如果主内存中时间戳、初始值与线程本地内存中副本的时间戳、初始值不等,继续循环,想等的话更新值和时间戳
                    } while (!atomicInteger.compareAndSet(reference, reference + 1, stamp, stamp + 1));
                }

            }, "b");
            Thread thread2 = new Thread(() -> {

                for (int i = 0; i < 100; i++) {

                    int stamp;
                    Integer reference;

                    do {

//                   预期时间戳
                        stamp = atomicInteger.getStamp();
//                   预期初始值
                        reference = atomicInteger.getReference();

//                  如果主内存中时间戳、初始值与线程本地内存中副本的时间戳、初始值不等,继续循环,想等的话更新值和时间戳
                    } while (!atomicInteger.compareAndSet(reference, reference + 1, stamp, stamp + 1));
                }
            }, "a");

            thread1.start();
            thread2.start();
            thread1.join();
            thread2.join();
            j++;
            System.out.println("n的在最终值:" + atomicInteger.getReference());

        }
    }
}
//        n的在最终值:200
//        n的在最终值:200
//        n的在最终值:200
//        n的在最终值:200
//        n的在最终值:200
//        n的在最终值:200
//        n的在最终值:200
//        n的在最终值:200
线程本地内内和主内存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。