测试代码
TestCAS.java
package juc.cas;
import java.util.Random;
public class TestCAS {
public static void main(String[] args) {
final CompareAndSwap cas = new CompareAndSwap();
for (int i = 0; i < 15; i++) {
new Thread(new Runnable() {
@Override
public void run() {
// 获取旧值
int exceptedValue = cas.get();
// 进行设置,返回设置情况
boolean isSet = cas.compareAndSet(exceptedValue, new Random().nextInt(101));
System.out.println("设置成功?" + isSet);
}
}).start();
}
}
/*
* 结果:
* 设置成功?true
* 设置成功?false
* 设置成功?false
* 设置成功?false
* 设置成功?false
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
* 设置成功?true
*/
}
class CompareAndSwap {
// 内存中值
private int value;
/**
*
* @return:返回内存中值
*/
public synchronized int get() {
return value;
}
/**
*
* @param exceptedValue:期待值
* @param newValue:等待设置的新值
* @return:本次更新成功返回true,否则返回false
*/
public synchronized boolean compareAndSet(int exceptedValue, int newValue) {
return exceptedValue == compareAndSwap(exceptedValue,newValue);
}
/**
*
* @param exceptedValue:期待值
* @param newValue:等待设置的新值
* @return:返回旧值,无论是否更新成功。
*/
public synchronized int compareAndSwap(int exceptedValue,int newValue) {
int oldValue = this.value;
if(oldValue == exceptedValue) {
this.value = newValue;
}
return oldValue;
}
}
其它
关注下方微信公众号,
回复:
JUC.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top