1、CASアルゴリズム
- CAS(比較交換)は、共有データへの同時アクセスを管理するための特別なコマンドで動作するように設計されたマルチプロセッサの同時プロセッサのハードウェアサポートです。
- CASはロックフリーのための非ブロッキングアルゴリズムを達成することです。
- CASは、メモリ値を読み出すために3つのオペランド、Vニーズを含み、比較がA、Bは、新しい値を書き込みしようとする値。
- もし、値がVアトミックな方法の値を更新することによって、新たな価値を持つV A、B CASに等しい場合にのみ、それは何もしないでしょう。
CASシミュレーションアルゴリズム
public class TestCompareAndSwap {
public static void main(String[] args) {
final CompareAndSwap compareAndSwap = new CompareAndSwap();
for (int i = 0; i < 10; i++) {
new Thread(() -> {
int expectvalue = compareAndSwap.get();
boolean b = compareAndSwap.compareAndSet(expectvalue, (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 expectValue, int newValue) {
int oldValue = value;
if (oldValue == expectValue) {
this.value = newValue;
}
return oldValue;
}
public synchronized boolean compareAndSet(int expectValue, int newValue) {
return expectValue == compareAndSwap(expectValue, newValue);
}
}