AtomicIntegerからAQSの原則に

AtomicIntgerは何ですか

  1. AtomicIntgerパッケージがint型である、それはアトミックアクセスおよび更新操作を提供する、即ち、アトミック割り当て方法、および原子の方法をデクリメント、アトミックインクリメントする方法を提供します。これは揮発性メモリの可視性(揮発性ここで確実に同期されたJavaのメモリモデルと揮発性、内部が前に言った、知らない見に飛び越えることができます)、その原子の操作を達成するためにCAS(スワップを比較・アンド・)技術をベースとしています。
  2. いわゆるCASは、記憶されたフラグの値を取得し、次にCAS命令が更新しようと使用することです。他のスレッドに代わって現在のフラグ値変わらないが、同時にこの値を変更した場合は、正常に更新。それ以外の場合は、再試行するか、成功か失敗かの結果を返すためにどちらかの、さまざまな選択肢を表示されることがあります。
  3. 視認性を確保するために記録された値、値フィールドの揮発性、それは安全でない、低レベルの動作を提供根底にある機能に依存し、そのいくつかのAtomicInteger特性、の内部から分かるように
  4. CASは、いわゆるロックフリーのメカニズムでのJava並行処理の基礎です。

AQS

原理と応用は、AQSを理解し、さらに練習JDKのソースコードと組み合わせて、行うには、少なくとも何、AQSは、AQSの使い方を理由を理解する必要があります

AQSは何ですか

AQS AbstactQueuedSynchronizerが短い、それはint型の変数は--state同期状態を表し、同期状態を管理するためにCASの一連の動作を提供してJavaは、レベルの同期ツールを増加させます。AQS主な役割は、継承AQSによる下層の部品の使用は、そのテンプレート法、内部クラス同期成分として、サブクラスを達成統合Java並行同期のサポートを提供することです。サブクラス同期内側例ReentrantLockの場合:

 public class ReentrantLock implements Lock, java.io.Serializable {
    private static final long serialVersionUID = 7373984872572414699L;
    private final Sync sync;

    abstract static class Sync extends AbstractQueuedSynchronizer {
        ...
    }
}
复制代码

AQS内部データと方法は、単純に分割することができます。

  1. 方法SETSTATEおよびgetStateをを提供しながら、揮発性状態は、整数メンバーを特徴とします
private volatile int state;
复制代码
  1. 待機中のスレッドの先入れ先出し(FIFO)キューが競争間マルチスレッドを実現し、コアAQS機構の一つである、待機します。
//内部类Node
static final class Node
复制代码
  1. CASは、操作の様々な方法に基づいて、種々の構造の所望の同期を達成するための具体的な方法を解放/獲得します。
//基于CAS的基础操作方法
private final boolean compareAndSetHead(Node update) 
private final boolean compareAndSetTail(Node expect, Node update) 
private static final boolean compareAndSetWaitStatus(Node node,int expect,int update) 
private static final boolean compareAndSetNext(Node node, Node expect, Node update) 

//实现的acquire/release方法等等
public final void acquire(int arg) 
public final boolean release(int arg)
······
复制代码
  1. 方法の少なくとも2つの基本的なタイプを達成するために、AQSは、同期構造を達成するため使用すること、すなわち、リソースへの排他的権利を取得するための手順を取得、解放操作、リソースの排他的放出があります。

おすすめ

転載: juejin.im/post/5d6a0675f265da03eb13e0cf