模拟CAS算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/woailuo23/article/details/97541248

 模拟CAS(Compare-And-Swap)算法

package com.pccc.pactera.juc01;

public class TestCompareAndSwap {
	public static void main(String[] args) {
		 final CompareAndSwap cas = new CompareAndSwap();
		 for (int i = 0; i < 10; i++) {
			new Thread(new Runnable() {
				
				@Override
				public void run() {
					int expectedValue = cas.get();
					boolean b = cas.compareAndSet(expectedValue, (int)(Math.random()*101));
					System.out.println(b);
				}
			}).start();
		}
	}
}	

class CompareAndSwap {
	private int value;

	// 获取内存值
	public synchronized int get() {
		return value;
	}

	// 比较
	public synchronized int compareAndSwap(int expectedValue, int newValue) {
		int oldValue = value;// 首先读取内存值
		if (oldValue == expectedValue) {
			this.value = newValue;
		}
		return oldValue;
	}

	// 设置
	public synchronized boolean compareAndSet(int expectedValue, int newValue) {
		return expectedValue == compareAndSwap(expectedValue, newValue);
	}

}

 在学习volatile关键字时,了解到原子变量CAS算法,三个操作数:内存值V,预估值A,更新值B,当且仅当V==A时,V=B,否则不做任何操作;

猜你喜欢

转载自blog.csdn.net/woailuo23/article/details/97541248