Javaプラットフォームには、並行処理ユーティリティのパッケージが含まれています。これらは並行処理クラスまたはアプリケーションの構築ブロックとして使用するために設計されたクラスです。Collections Frameworkが、一般的に使用されるデータ構造の実装を提供することにより、インメモリー・データの編成と操作を簡素化したのと同様に、並行処理ユーティリティは、並行処理設計で一般的に使用される構築ブロックの実装を提供することにより、並行処理クラスの開発を簡素化します。並行処理ユーティリティには、高性能で柔軟なスレッド・プール、タスクの非同期な実行に対するフレームワーク、同時アクセスに対して最適化されたコレクション・クラスのホスト、計数セマフォ、原子変数、ロック、および条件変数などの同期ユーティリティが含まれています。
スレッド・プールなどのコンポーネントを独自開発する代わりに並行処理ユーティリティを使用すると、次のような利点があります。
synchronized
、volatile
、wait()
、notify()
およびnotifyAll()
)は適切に使用することが困難で、これらの機能を使用した場合に発生するエラーの検出およびデバッグは困難です。標準化され、幅広くテストされた並行構築ブロックを使用することにより、デッドロック、欠乏状態、競合状態、または過度のコンテキスト・スイッチングなどのスレッド化の危険を引き起こす潜在的な原因が取り除かれます。並行処理ユーティリティはデッドロック、欠乏状態、競合状態を注意深く検査しました。つまり、並行アプリケーションの実装に並行処理ユーティリティを使用すると、自分のプログラムをより明確に、より短く、より高速にできます。信頼性も高く、スケーラブルで、書くことも読むことも、また管理も簡単です。
並行処理ユーティリティには次の項目が含まれます。
Executor
インタフェースは、一連の実行ポリシーに基づいて非同期なタスクの呼び出し、スケジューリング、実行、管理を標準化します。単一バックグラウンドのスレッド (Swingでのイベントのように)、新しく作成されたスレッド、またはスレッド・プール内の要求されたスレッドで実行されるタスクを許可する実装が採用され、開発者は任意の実行ポリシーをサポートするExecutorのカスタマイズした実装を作成できます。組込みの実装は、キューの長さ制限および飽和ポリシーなどの構成可能なポリシーを提供し、リソースの無駄な使用を防ぐことによってアプリケーションの安定性を向上させます。Queue
、BlockingQueue
、BlockingDeque
インタフェース、および高性能のMap
、List
、Queue
の並行実装が含まれます。詳細は、Collections Frameworkに関するガイドを参照してください。java.util.concurrent.atomic
パッケージの原子変数の実装は、ほとんどのプラットフォームにおいて、同期の使用により可能になるパフォーマンスより高いパフォーマンスを提供し、高性能の並行処理アルゴリズムの実装と同時に、カウンタとシーケンス番号のジェネレータを簡便に実装します。java.util.concurrent.locks
パッケージは同期と同様のメモリー・セマンティックスを使用する高性能のロック実装を提供します。さらに、ロック、ロックごとの複数の条件変数の獲得、複数のロックの入れ子を使用しない(hand-over-hand)保持を試みるときのタイムアウトの指定もサポートし、ロックを獲得するために待機している割込みスレッドをサポートします。System.nanoTime
メソッドは、相対的な時間を測定するためにナノ秒の単位でタイム・ソースへのアクセスを受け入れます。タイムアウトを受け入れるメソッド(たとえば、BlockingQueue.offer
、BlockingQueue.poll
、Lock.tryLock
、Condition.await
およびThread.sleep
)はタイムアウト値をナノ秒単位で設定できます。System.nanoTime
メソッドの実際の精度はプラットフォームにより異なります。