CAS:当内存值与预期值相同,则可以更新newValue,否则返回
package com.test1;
public class CompareAndSwap {
public static void main(String[] args) {
final Cas cas = new Cas();
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()*100));
System.out.println(b);
}
}).start();
}
}
}
class Cas{
private volatile int value;
//内存值
public synchronized int get() {
return value;
}
public synchronized int compareAndSwap(int expectedValue,int newValue) {
int oldValue = value;//获取内存值
if(oldValue==expectedValue) { //调用的时候需要再获取内存值expectedValue
this.value = newValue;//内存值与预期值一样设置新值
}
return oldValue;
}
public synchronized boolean compareAndSet(int expectedValue,int newValue) {
return expectedValue==compareAndSwap(expectedValue, newValue);
}
}
测试结果: 有成功也有失败