java.util.co ncurrentの紹介

4099 ワード

もっと読む
                                                      java.util.co ncurrentの紹介
 
java.util.co ncurrent.atomicはクラスの小さいツールの包みで、単一の変数の上でロックを解除するスレッドの安全なプログラミングを支持します。実は、このカバンの種類はvolatile値、フィールドおよび配列要素の概念をそれらの原子条件の更新操作も提供するクラスに拡張することができます。その形式は以下の通りです。
 
AtomicBoolean、AtomicInteger、AtomicLong、AtomicReferenceの例は、それぞれのタイプの単一変数へのアクセスと更新を提供します。各クラスもこのタイプのために適切な実用的なツール方法を提供する。例えば、クラスAtomicLongとAtomicIntegerは原子の増分方法を提供しています。一つのアプリケーションは、シーケンス番号を以下のように生成します。
class Sequencer {
private AtomicLong sequenceNumber = new AtomicLong(0);
public long next() { return sequenceNumber.getAndIncrement(); }
}
 
java.util.co ncurrent.locksは、同期とモニタを内蔵するのとは違って、ロックと待ち受け条件のためのフレームワークとクラスを提供します。フレームワークは、より柔軟にロックと条件を使用することができますが、より使いにくい文法を代償としています。
ロックインターフェースは、意味の異なる(再入力、公平など)ロック規則をサポートしており、これらの規則は、非ブロッキング構造のコンテキスト(han-over-handとロック再配列アルゴリズムを含む)で使用されてもよい。主な実現はRentrantLockである。
ReadWriteLockインターフェースは、いくつかの読取者が共有可能であり、書き込み者が独占するロックを同様に定義している。このパッケージは、Reentrant ReadWriteLockという一つの実装しか提供されていません。ほとんどの標準的な使用文脈に適用されます。しかし
プログラマは自分の非標準的な要求に適用された実現を作成することができます。
Conditionインターフェースはロックに関連する可能性があると説明しています。
条件変数これら
変数はObject.waitを使ってアクセスする隠しモニタと似ていますが、より強力な機能を提供します。特に指摘したいのは、単一のLockが複数のCondationオブジェクトと関連している可能性があることである。互換性の問題を避けるために、Condationメソッドの名前は対応するObjectバージョンと異なる。
AbstractQueueueuedSynchronizerクラスは非常に有用な超クラスであり、ロックを定義したり、列のブロッキングスレッドに依存したりする他の同期器を使用することができます。LockSupport類はより低いレベルのブロッキングとブロッキングの解除サポートを提供しています。これは自分のカスタマイズロック類を実現する開発者にとても役立ちます。 
 
java.util.co ncurrentは、同時プログラミングでよく使われる実用的なツール類です。その下の主要なインターフェースとクラス:
 
1.Exector
インターフェースExectorは、スレッドと同様のカスタムサブシステムを定義するための簡単な標準化インターフェースである。
スレッド池、非同期IOとライト級のタスクフレーム。使用する具体的なExectorクラスによっては、新たに作成されたスレッドに、既存のタスク実行スレッドにおいて、またはexecute()を呼び出したスレッドにおいてタスクが実行され、順番または同時に実行される場合があります。ExectorServiceは、複数の完全な非同期タスクの実行フレームワークを提供します。ExectorService管理タスクの行列と配置は、制御を受けることができます。ScheduledExect rService
サブインターフェースは、遅延および定期的なタスクに対するサポートを追加します。ExectorServiceは、Callableによって表される任意の実行可能な非同期的な実行を配置する方法を提供する。
関数は、結果がRunnableに似ています。Futureは戻ります
関数の結果、実行が完了したかどうかを判定し、実行をキャンセルする方法を提供することができます。
2.Exect rServiceThreadPoolExectorとSchduledThreadPool Exectorは調整可能で柔軟なものを提供します。
スレッドの池Exectorsクラスは、ほとんどのExectorの一般的なタイプと配置の工場方法を提供し、それらを使用するいくつかの実用的なツール方法を提供します。他のExectorベースの実用的なツールは、特定のクラスFutureTaskを含み、Futureの一般的な拡張可能な実装を提供し、Exectrocopetion Serviceは、非同期タスクグループの処理を調整するのに役立つ。
3.Que
java.util.co ncurrent ConcerentlinkedQue類は高効率で伸縮性のある、
スレッドの安全な非ブロッキングFIFOキューです。java.util.co ncurrentの5つの実装は、拡張されたBlockingQueインターフェースをサポートしています。このインターフェースは、putとtakeのブロッキングバージョンを定義しています。
ArayBlocking Que、SyncronousQue、PriorityBlocking Que、DelayQue。これらの異なるクラスは、生産者-使用者、メッセージ伝達、並列タスク実行および関連同時設計の多くの一般的な使用の文脈をカバーしている。
4.TimeUnit
TimeUnit類はタイムアウトによる操作を指定し制御するための多重粒度(ナノ秒級を含む)を提供します。このカバンの多くは不確定な待ち時間を含むほか、タイムアウトによる操作も含まれています。タイムアウトを使用するすべての場合、タイムアウトはタイムアウトを表明する前にこの方法が待つべき最小時間を指定しました。タイムアウトが発生したら、「ベスト」でタイムアウトを検出します。しかし、タイムアウトとタイムアウトを検出した後、再度実際にスレッドを実行すると、不確定な時間が経過する可能性があります。
5.同期器
四つのクラスは共通の専用同期文を実現するのに協力できます。Semaphoreは古典的な合併ツールです。CountDownLatchは、与えられた数の目的の信号、イベント、または条件を保持する前に、ブロックを実行するために、極めて簡単であり、かつ極めて一般的な実用ツールである。CyclicBarrierはリセット可能な多重同期点であり、いくつかの並列プログラミングスタイルで有用である。Exchangeは二つのスレッドを許可します。
集合点交換オブジェクトは,多流線設計において有用である。
6.current collectionはキューの他に、いくつかの設計を提供しています。
マルチスレッドコンテキストにおけるCollectionは、CopyOnWriteArayListとCopyOnWriteAraySetを実現する。
このバッグでは、いくつかのクラスと一緒に使用する「Concerent」プレフィックスは、同じような「同期」クラスとは異なることを示す簡潔な文章です。例えば、java.util.hashtableとCollection s.synchronizdMapは同期していますが、ConcerenthashMapは「同時」です。集合は集合です。
スレッドは安全ですが、単一の排他的なロックによって管理されていません。ConcerenthashMapという特定の状況においては、任意の数の同時読み取りと、数の調整可能な同時書き込みを安全に許可することができます。セットに対するすべてのアクセスを単一のロックによって阻止する必要があります。「同期」クラスは非常に有用であり、その価格はより低い伸縮性である。複数のスレッドが共通の集合にアクセスすることが期待される他の場合、通常は「併発」バージョンのほうがいい。セットが共有されていない場合、または他のロックのみを維持する場合は、集合がアクセス可能である場合、非同期の集合がより良い。
大多数の同時コレクションの実現(大多数のQueueを含む)は、通常のjava.utilとの約束も違っています。
ディケンサは弱い一貫性を提供しています。早い失敗の遍歴ではなく、弱い一致です。
ローズマリーは
スレッドは安全ですが、リピート時に集合を凍結する必要はありませんので、必ずしもリズミカル作成以来の更新を反映していません。