Java 2 プラットフォームには、並行処理ユーティリティーの新しいパッケージが含まれています。これらは並行処理クラスまたはアプリケーションの構築ブロックとして使用するために設計されたクラスです。Collections Framework が、一般的に使用されるデータ構造の実装を提供することにより、メモリー内のデータの編成と操作を簡素化したのと同様に、並行処理ユーティリティーは、並行処理設計で一般的に使用される構築ブロックの実装を提供することにより、並行処理クラスの開発を簡素化します。並行処理ユーティリティーには、高性能で柔軟なスレッドプール、タスクの非同期な実行に対するフレームワーク、同時アクセスに対して最適化されたコレクションクラスのホスト、計数セマフォー、原子変数、ロック、および条件変数などの同期ユーティリティーが含まれています。
スレッドプールなどのコンポーネントを独自開発する代わりに並行処理ユーティリティーを使用すると、次のような利点があります。
synchronized
、volatile
、wait()
、notify()
、および notifyAll()
) は適切に使用することが困難で、これらの機能を使用した場合に発生するエラーの検出およびデバッグは困難です。標準化され、幅広くテストされた並行構築ブロックを使用することにより、デッドロック、欠乏状態、競合状態、または過度のコンテキストスイッチイングなどのスレッド化の危険を引き起こす潜在的な原因が取り除かれます。並行処理ユーティリティーはデッドロック、欠乏状態、競合状態を注意深く検査しました。つまり、並行アプリケーションの実装に並行処理ユーティリティーを使用すると、自分のプログラムをより明確に、より短く、より高速にできます。信頼性も高く、スケーラブルで、書くことも読むことも、また管理も簡単です。
並行処理ユーティリティーには次の項目が含まれます。
Executor
インタフェースは、一連の実行ポリシーに基づいて非同期なタスクの呼び出し、スケジューリング、実行、管理を標準化します。単一バックグラウンドのスレッド (Swing でのイベントのように)、新しく作成されたスレッド、またはスレッドプール内の要求されたスレッドで実行されるタスクを許可する実装が採用され、開発者は任意の実行ポリシーをサポートする Executor のカスタマイズした実装を作成できます。組み込みの実装は、キューの長さ制限および飽和ポリシーなどの構成可能なポリシーを提供し、リソースの無駄な使用を防ぐことによってアプリケーションの安定性を向上させます。Queue
、 BlockingQueue
、BlockingDeque
インタフェース、および高性能の Map
、List
、Queue
の並行実装が含まれます。詳細は『Collections Framework Guide』を参照してください。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
メソッドの実際の精度はプラットフォームにより異なります。