CAS算法、原子变量

1、CAS算法

  • CAS(Compare-And-Swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊的命令,用于管理对共享数据的并发访问。
  • CAS 是一种无锁的非阻塞算法的实现;
  • CAS 包含了3个操作数,需要读写的内存值的V,进行比较的值A,拟写入的新值B;
  • 当且仅当V的值等于A时,CAS通过原子方式用新值B来更新V的值,否则不会执行任何操作;
模拟CAS算法
/**
 * @author zhengzheng046
 */
public class TestCompareAndSwap {

    public static void main(String[] args) {
        final CompareAndSwap compareAndSwap = new CompareAndSwap();
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                int expectvalue = compareAndSwap.get();
                boolean b = compareAndSwap.compareAndSet(expectvalue, (int) (Math.random() * 101));
                System.out.println("[" + b + "]");
            }).start();
        }
    }
}


class CompareAndSwap {

    private int value;

    public synchronized int get() {
        return value;
    }

    /**
     * 比较,旧值与期望值相等时,将新值赋给旧值变量
     *
     * @param expectValue
     * @param newValue
     * @return
     */
    public synchronized int compareAndSwap(int expectValue, int newValue) {
        int oldValue = value;
        if (oldValue == expectValue) {
            this.value = newValue;
        }
        return oldValue;
    }

    //设置
    public synchronized boolean compareAndSet(int expectValue, int newValue) {
        return expectValue == compareAndSwap(expectValue, newValue);
    }
}
发布了21 篇原创文章 · 获赞 4 · 访问量 515

猜你喜欢

转载自blog.csdn.net/weixin_39617728/article/details/104807145