08:スレッドセーフな操作のアトミック

    説明の用語との競争あまりに:(クリティカル領域の条件が同じリソースへのマルチスレッドアクセス)実際には
        、これらのリソースに書き込まれている複数のスレッドが同じリソースにアクセスし、実行順序を要求しました。上の競合状態が発生することがあります。
        クリティカルセクション:コードの一部、マルチスレッド実行の場合には、結果が影響を与える場合。そして、このコードは重要な領域です。
        レース条件:それは、マルチスレッド環境の競争共有リソースの場合を指します。
    アトミック操作:
        アトミックオペレーションはステップまたは複数のステップが、実行の順序は、切断は、部分的に行うことができない、邪魔することはできません。(無停電)全体の動作が原子とみなされるようになっています。
        重要なゾーンは、アトミック操作に変換されます。保証スレッドセーフ。
    CASメカニズム:
        これは原子性を達成するための基本的なメカニズムです。
        比較とスワップの比較とスワップは、ハードウェアのプリミティブ、プロセッサによって提供される基本的なアトミックメモリ操作
        CAS操作は、2つのパラメータ(古い値と新しい値)が必要です。古い値をして、新しい更新された値を比較します。
        変更が発生した場合かどうかは、動作時に古い値に変更します。別のスレッドがすでに新しい値を書いてはいけません、その変形例を説明しました。
                                          変更されていない場合は、次の説明は、この値は変更されません、あなたは新しい値を書き込むことができます。
    JUCパッケージラッパークラスは、原子提供:(実際に使用)CASメカニズムが実装さ
        AtomicBooleanを:ブール型のアトミック更新
        のAtomicInteger:アトミック更新整数
        AtomicLong:ロングアトミック更新は
        、参照配列が更新、更新のフィールドを更新します。
        jdk1.8には更新日:効率化カウンタを提供します。、高効率のマルチスレッド頻繁な更新のためのシーンが、頻繁に読んでいません。
            カウンター:DoubleAdder、LongAdder 
            アップデータ:DoubleAccumulator、LongAccumulator。(カウンタのバージョン、追加された列に加えて、カスタマイズされた計算を実行することができる強化)
        、例えば、整数増分を実装:
         のAtomicInteger Iの = 新しい新規のAtomicInteger(0に);
          公共 ボイド追加(){
              // Unsafe.classを使用して基礎となるクラス達成。このクラスは、直接メモリを操作することができます。CAS機構は、このようにアトミック性を保証する、実施しました。安全でない可能性のプラットフォーム、および安全ではありません。
            i.incrementAndGet(); 
         } 
    CASの欠点:
         1:+サイクルCASは、高周波数で実行中のスレッド、リソースの無駄である
         2:単一の変数のために、データは、同時に複数の原子を制御することはできません。

 

おすすめ

転載: www.cnblogs.com/Xmingzi/p/12617367.html