AQSフェイス質問

Q:AQSは何ですか?

A:AQSフルネーム(AbstractQueuedSynchronizer)以下、このクラスjava.util.concurrent.locksパッケージに。AQSは、フレームロックとシンクロナイザ構築するために使用され、そのようReentrantLockの、セマフォ、ReentrantReadWriteLock、SynchronousQueueを、 FutureTask などはすべてAQSに基づいています。

Q:AQSは、核となるアイデアは何ですか?それはどのように達成することですか?

:AQSの核となるアイデアは、要求された共有リソースがフリーであれば、その後の有効ワーカースレッドのためのリソースの現在のリクエストスレッドセット、ロック状態に共有リソースです。共有リソースを要求された場合に占有され、その後、あなたはブロックして起こされるために割り当てられたロック機構を待つスレッドを必要とし、AQSこのメカニズムはCLHロックキューによって実現され、一時的にスレッドをロックするよりも少ないを取得しようとしているキューに追加されます。 AQSは、内蔵FIFOキューを介して作業キュースレッドを完了するために、同期ステータスが表現するためにリソースへのアクセスをvoliate int型のメンバ変数を使用します。CAS AQSは、その値の同期状態の変化を達成するために、アトミック操作を使用して。

AQSは、2件のリソースアクセスを定義:排他的(一つだけスレッドが実行をアクセスするだけでなく、株式及び非株式のようなロック、に注文キューロックするかどうかに応じできReentrantLockの)共有(複数のスレッドのような、同時にアクセス実行セマフォ/たCountDownLatch、セマフォ、たCountDownLatch、CyclicBarrierを)。ReentrantReadWriteLockは、モジュラーとして見ることができ、複数のスレッドがリソースを読み取ることができます。 

テンプレートメソッドパターンを使用してAQS底、  カスタム同期が必要状態にリソースを共有する方法の放出を達成し、取得した場合にのみ達成しますが、特定のスレッドは、キュー(例えばチーム/ウェイクアウトチームの故障などのリソースへのアクセスを)維持するために待機しています、 AQSは、すでに私たちはトップ良いの達成に役立っています。

おすすめ

転載: www.cnblogs.com/doit8791/p/10971420.html