CAS 原理
我认为位置V 应该包含值A如果包含该值则将B 放到这个位置否则不要更改该位置只告诉我这个位置现在的值即可
CAS使用示例(jdk 并发包 AtomicInteger类分析
/**
* Atomically sets to the given value and returns the old value
*
* @param newValue the new value
* @return the previous value
*/ public final int getAndSet(int newValue) {
for (;;) {
int current = get();
if (compareAndSet(current newValue))
return current;
}
}
public final boolean compareAndSet(int expect int update) {
return unsafecompareAndSwapInt(this valueOffset expect update);
}
这个方法是AtomicInteger类的常用方法作用是将变量设置为指定值并返回设置前的值
它利用了cpu原语compareAndSet来保障值的唯一性
另AtomicInteger类中其他的实用方法也是基于同样的实现方式
比如 getAndIncrementgetAndDecrementgetAndAdd等等
[] [] [] []