CASメカニズムとは何ですか?
比較してスワップ比較してスワップ
Atomicクラス(atomicクラス)を通じて詳細に理解し、CASを深く理解します。
++(追加操作)スレッドセーフティを実現するためにvolatile(可視性)を使用せず、アトミッククラスを使用して実現することもできます
アトミッククラスの基盤となる実装:安全でないクラス-もう1つのポイントは、ConcurrentHashMapのtransferAndメソッドがUnsafe compareAndSwapIntメソッド(CASメカニズム)を使用してスレッドセーフ拡張操作を実現することです。
incrementAndGet()メソッドはアトミック操作です。
キーコード:
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
compareAndSwapInt、現在のオブジェクトの値を取得し、それをメモリ値と比較します。同じである場合は(+1)を変更してTrueを返し、ループを終了します。そうでない場合は、再度取得し、値を設定して、成功するまで比較します。ループの実行は1つのスピンです
CASメカニズムの欠点:
1:アトミッククラスとアトミッククラス間の操作はアトミックではありません
2:優れたパフォーマンスオーバーヘッドをもたらす連続回転
3:ABA問題。
解決策:アトミッククラス+バージョン管理、たとえば:AtomicStampedReferenceの実装。