詳細たCountDownLatch、セマフォ四大同時ツール

Javaの並行処理キット

ファイル

1.同時ツール

より豊かなマルチスレッド動作を実現することができ、その他たCountDownLatch、CyclicBarrierを、セマフォ、を含む:様々な構造の同期同期に比べ、より高度な提供します。

2.コンカレント・コンテナー

オファーは、スレッドセーフなコンテナの様々な:最も一般的なのConcurrentHashMap、整然としたConcurrentSkipListMapのは、動的な配列がそうで安全CopyOnWriteArrayListとし、スレッド達成します。

3.同時キュー

特定のシーンのための共通ArrayBlockingQueue、SynchorousQueueまたはPriorityBlockingQueue:BlockingQueueのさまざまなを達成するために。

4.Executorフレームワーク

あなたは、スレッドプールの異なる種類、などほとんどの場合、実行されているようにスケジュールされたタスク、もはや再実装、独自のスレッドプールへの必要性と、タスクスケジューラの様々なを作成することができます。

ファイル

Javaの一般的なコンカレント・コンテナー

1.ConcurrentHashMap

コンカレント・コンテナー頻繁に使用され、JDK基礎となるデータ構造1.7および1.8次のようにシーケンスがある学習の勧告があるかもしれない、(フォローアップ記事では説明します)変更されました:Java7 HashMapのから - > Java7のConcurrentHashMapは - > Java8のHashMap - > Java8 ConcurrentHashMapのは、とても以上であってもよいです良いは、HashMapのから進化した、すべての後に、このコンカレント・コンテナーを把握します。

2.ConcurrentSkipListMap

非常に頻繁な変更となるため、データの必要性についてのケア

3.CopyOnWrite容器

コピー・オン・ライト容器であるコピーオンライト・コンテナ。開始JDK1.5のJava並行処理パッケージから同時使用コピーオンライトコンテナ、CopyOnWriteArrayListととCopyOnWriteArraySetを達成するために2つのメカニズムを提供します。

様々4.同時キュー

様々なBlockedQueueは、典型的なArrayBlockingQueue、SynchorousQueueを達成しました。

詳細については以下を参照してください。同時コンテナ、7同時詳しいコンテナ、および使用シナリオの原則を

ファイル

Javaの並行処理は、一般的なツールを使用しました

ファイル

1.CountDownLatch

1)機能

たCountDownLatch補助クラスは、1つまたは複数のスレッド、仕上げに他のスレッドを待っているのセット、およびを継続できるように、同期しています。

2)原則:

  • たCountDownLatchは、カウンタ、待機中のスレッドの必要数の初期カウンタ値によって達成されます。
    ファイル
  • カウンタが0になるまでメインスレッドの呼び出しがたCountDownLatch()メソッドブロックを現在のスレッド(ロックアウトのメインスレッド待ちIE)を待ちます。
  • ワーカースレッドがカウントダウンのたCountDownLatch()値メソッドを呼び出し、そのタスクを完了すると、カウンタがデクリメントされます。
  • カウンタ値がすべてのワーカースレッドがオーバーが実行されていることを示し、0のとき、メインスレッドをロック待ち時間に、この時間は、実行タスクを再開することができます。

3)アプリケーションシナリオ

カウントダウンタイマー

例:一般的なシナリオは、ロケット打ち上げということです。ロケット打ち上げの前に、誰にでもできるを確保するために、多くの場合、我々は、機器をチェックするために楽器を持っています。のみすべてのチェックなどが完了した後、エンジンが発火することができます。このシナリオでは、使用されたCountDownLatchに非常に適しています。

それは実行して、完全にすべてのチェックが完了した後、スレッドを待って、点火スレッドを作ることができます

4)使用

静的最終たCountDownLatch端=新しいたCountDownLatch(10); end.countDown(); end.await()。

5)の模式図。

ファイル

2.CyclicBarrier

1)機能:

CyclicBarrierを文字通り手段を再利用することができます(サイ)の障壁(バリア)。それが行われる必要がある最後のスレッドがバリアに到達するまで、それは、バリアがドアを開くときにブロックされたスレッドのグループは(も同期ポイントと呼ばれる)バリアに到達させることです、すべての障壁は、スレッドの実行を継続しますブロックされています。

いくつかのスレッドが後で行われため、同様のたCountDownLatchは、待っています。

2)たCountDownLatchの差を

繰り返し使用することができます。このカウンター。例えば、我々はカウンター10に設定されますと仮定します。次いで、最初の10件のスレッド一緒に玉石、カウンタは次の10件のスレッドのグループを一緒次いで玉石次いで、ゼロです。

3)原則

1)CyclicBarrierをカウンタ、待機中のスレッドの必要数の初期カウンタ値によって実現されます。例えば:CyclicBarrierをC =新しいCyclicBarrierを(2);スレッドを待っているの//数2

2)各スレッドはCyclicBarrierを待機状態に自分自身を作るためのawait()メソッドを呼び出します。

すべてのスレッドがのawait()メソッドの後にCyclicBarrierを呼ばれたとき3)、すべてのスレッドが実行を継続し、待って停止します。

4)使用

公共CyclicBarrierを(int型のパーティー、RunnableをbarrierAction)、タイマ1カウントは、システムが実行されたときのawait barrierAction動作が完了しました()

5)の模式図。

ファイル

3.セマフォセマフォ

1)機能: Javaは)許可証(許可証である古典的なセマフォセマフォの実装を提供し、共通のリソースへのアクセスを制限する目的を達成するために、いくつかの方法を制御します。たとえば:同時実行スレッド数を制御します。

2)原則:

1)セマフォカウンタ(ライセンスのレコード数)、待機中のスレッドの必要数の初期カウンタ値によって実装されます。

ファイル

2)スレッド取得()メソッドによってそれらが実行、またはブロック、現在のスレッドを継続することができる前にのみライセンスを取得するために、ライセンス(カウンタ値-1)を取得します。

3)ライセンス(カウンタ値+ 1)のリリースを返すように()メソッドを通します。

注:使用tryAcquire()メソッドは、すぐに結果を得ることができます:ライセンスを取得しようと、買収が成功すれば、その後すぐに買収が失敗した場合、それはすぐにfalseを返し、trueを返します。

3)アプリケーションのシナリオ:

セマフォは、データベース接続などの公共資源のアプリケーションシナリオ、と、特に、トラフィック制御を行うために使用することができます。

シーンの場合:例えば、鉄道の駅、空港、その他のタクシーでは、代わりに空のタクシーの多くは過密防ぐために、ディスパッチャは、チームの待っている車を指揮、電車で5人、およびバス上の他の5人で来ます次のバッチ再び生きて来ました。これは、セマフォは少し似て動作します。

4.交換交換

1)機能:交換(交換)は、スレッド間のクラスのコラボレーションのためのツールです。スレッド間でデータを交換するための交換。なお、この同期点で2つのスレッドが相互にデータを交換することができる、同期ポイントを提供します。最初のスレッドが交換方式を実行する場合に交換データ交換方法にこれら2つのスレッドが、それはまた、交換が、2つのスレッドが同期点に到達したときに、これら2つのスレッドがデータを交換することができる行う第2のスレッドを待つされているだろうデータは、他の側に渡されることにより、このスレッドが生成されます。

2)原則:

スレッドは、公衆交換V(V DATAA)メソッドを呼び出して、同期ポイントをスレッド同期ポイントは、フロントスレッドBに到達するまで達し、待ちます

スレッドBは、公衆交換V(V DATAB)メソッドを呼び出し、スレッドBは、同期点に到達します。

スレッドAおよびスレッドBが同期点に到達した場合、スレッドは、データを所有するデータの交換が完了した2つのスレッドが、もう一方の側に渡されます。

3)交換のアプリケーションシナリオ

交換は、シーンの校正作業に使用することができます。

ブログ記事複数のプラットフォームからこの記事OpenWriteリリース!

おすすめ

転載: juejin.im/post/5df24bef518825126874c2e9