/* * 模拟 CAS 算法 */
public class TestCompareAndSwap {
public static void main(String[] args) {
final CompareAndSwap cas = new CompareAndSwap();
for (int i = 0; i < 10; i++) {
new Thread(()->{
int expectedValue = cas.get();
boolean boo = cas.compareAndSet(expectedValue, (int)(Math.random() * 100));
System.out.println(boo+":预估值--"+expectedValue);
}).start();
}
}
}
class CompareAndSwap{
//模拟内存值
private int value;
//获取内存值
public synchronized int get(){
return this.value;
}
//比较和交换
public synchronized int compareAndSwap(int expectedValue,int newValue){
//获取内存值
int oldValue = value;
//内存值等于预估值
if(expectedValue == oldValue){
//更新内存值
value = newValue;
}
return oldValue;
}
//判断是否修改成功
public synchronized boolean compareAndSet(int expectedValue,int newValue){
return expectedValue == compareAndSwap(expectedValue, newValue);
}
}