JavaTM 2 Platform
Standard Ed. 5.0

パッケージ java.util.concurrent

通常、ユーティリティクラスは並行プログラミングで有用です。

参照先:
          説明

インタフェースの概要
BlockingQueue<E> 要素の取得時にキューが空でなくなるまで待機したり、要素の格納時にキュー内の空間が利用可能になるまで待機する操作を追加サポートする Queue
Callable<V> 結果を返すタスク。
CompletionService<V> 新しい非同期タスクの生成を、完了済みタスクの結果の消費から分離するサービス。
ConcurrentMap<K,V> 追加の原子的 putIfAbsentremovereplace メソッドを提供する Map
Delayed 指定された遅延後に動作するオブジェクトをマークするための、混合スタイルのインタフェース このインタフェースの実装は、getDelay メソッドと整合性のある順序を提供する compareTo メソッドを定義する必要があります。
Executor 送信された Runnable タスクを実行するオブジェクト。
ExecutorService 終了を管理するメソッド、および 1 つ以上の非同期タスクの進行状況を追跡する Future を生成可能なメソッドを提供する Executor
Future<V> Future は、非同期計算の結果を表します。
RejectedExecutionHandler ThreadPoolExecutor で実行不可能なタスクのハンドラ
ScheduledExecutorService 指定された遅延時間後、または周期的にコマンドの実行をスケジュール可能な ExecutorService
ScheduledFuture<V> 取り消し可能な、遅延された結果生成アクション。
ThreadFactory 要求に応じて新規スレッドを作成するオブジェクト。
 

クラスの概要
AbstractExecutorService ExecutorService 実行メソッドのデフォルト実装を提供します。
ArrayBlockingQueue<E> 配列に基づくバウンド形式のブロックキュー
ConcurrentHashMap<K,V> 取得の完全な同時性および予想される調整可能な更新同時性をサポートするハッシュテーブル。
ConcurrentLinkedQueue<E> アンバウンド形式のスレッドセーフな キューベースのリンクノード。
CopyOnWriteArrayList<E> 基になる配列の新しいコピーを作成することにより、すべての変更操作 (追加、設定など) が実装される ArrayList のスレッドセーフな変数です。
CopyOnWriteArraySet<E> すべての操作で CopyOnWriteArrayList を使用する Set
CountDownLatch 他のスレッドで実行中の操作セットが完了するまで、1 つ以上のスレッドを待機可能にする同期支援。
CyclicBarrier スレッドセットのそれぞれが共通のバリアポイントに達するまで待機することを可能にする同期化支援機能。
DelayQueue<E extends Delayed> Delayed 要素のアンバウンド形式のブロックキュー
Exchanger<V> 2 つのスレッドがオブジェクトを交換可能な同期ポイント。
ExecutorCompletionService<V> タスクの実行に指定された Executor を使用する CompletionService
Executors このパッケージで定義された ExecutorExecutorServiceScheduledExecutorServiceThreadFactory、および Callable クラス用のファクトリおよびユーティリティメソッド。
FutureTask<V> 取り消し可能な非同期計算。
LinkedBlockingQueue<E> リンクノードに基づく、オプションのバウンド形式ブロックキュー
PriorityBlockingQueue<E> PriorityQueue クラスと同じ順序付け規則を使用し、ブロック取得操作を提供する、アンバウンド形式のブロックキュー
ScheduledThreadPoolExecutor 指定された遅延後または周期的に実行するためのコマンドを追加スケジュール可能な ThreadPoolExecutor
Semaphore カウントに使用されるセマフォ。
SynchronousQueue<E> puttake を待機し、その逆も実行する必要があるブロックキュー
ThreadPoolExecutor 多くの場合、プールされた複数のスレッドのいずれかを使用して、送信された各タスクを実行する ExecutorService
ThreadPoolExecutor.AbortPolicy RejectedExecutionException をスローする、拒否されたタスクのハンドラ。
ThreadPoolExecutor.CallerRunsPolicy executor がシャットダウンしていない場合に、execute メソッドのスレッド呼び出しで拒否されたタスクを直接実行する、拒否されたタスクのハンドラ。
ThreadPoolExecutor.DiscardOldestPolicy executor がシャットダウンしていない場合に、もっとも古い未処理の要求を破棄して execute を再試行する、拒否されたタスクのハンドラ。
ThreadPoolExecutor.DiscardPolicy 拒否されたタスクを予告なく破棄する、拒否されたタスクのハンドラ。
 

列挙型の概要
TimeUnit TimeUnit は、期間を指定された粒度単位で表します。
 

例外の概要
BrokenBarrierException 故障状態にあるか、スレッドの待機中に故障状態に入るバリアを、スレッドが待機しようとしているときにスローされる例外です。
CancellationException タスクが取り消されたために、FutureTask などの値を生成するタスクの結果を取得できないことを示す例外。
ExecutionException 例外のスローにより中断されたタスクの結果を取得しようとしたときに、スローされる例外。
RejectedExecutionException タスクを受け入れて実行できない場合に、Executor によりスローされる例外
TimeoutException ブロック操作がタイムアウトしたときにスローされる例外。
 

パッケージ java.util.concurrent の説明

通常、ユーティリティクラスは並行プログラミングで有用です。このパッケージには、いくつかの小規模な標準化された拡張可能フレームワーク、および利便性が高く、他の点では単調で実装の困難な機能を提供するクラスが含まれます。以下に、主要コンポーネントについて簡潔に説明します。locks および atomic パッケージも参照してください。

Executor

インタフェース。 Executor は、スレッドプール、非同期入出力、および軽量タスクフレームワークを含む、スレッドに似たカスタムサブシステムを定義するための標準化された単純なインタフェースです。使用中の具象 Executor クラスに応じて、新規作成されたスレッド、既存のタスク実行スレッド、または execute() を呼び出すスレッド内でタスクを順次または同時に実行できます。ExecutorService は、より完成度の高い同期タスク実行フレームワークを提供します。ExecutorService は、タスクのキューイングおよびスケジューリングを管理し、制御されたシャットダウンを可能にします。 ScheduledExecutorService サブインタフェースは、遅延および周期的なタスク実行サポートを追加します。ExecutorServices は、Runnable と類似した結果を得られる、Callable で表現される任意の関数の非同期実行を取り決めるメソッドを提供します。Future は、関数の結果を返し、実行が完了したかどうかを判別可能にし、実行を取り消す手段を提供します。 実装。ThreadPoolExecutor および ScheduledThreadPoolExecutor クラスは、チューニング可能で柔軟性の高いスレッドプールを提供します。Executors クラスは、Executor のもっとも一般的な種類および構成のファクトリメソッド、およびこれらに特に対応したいくつかのユーティリティメソッドを提供します。Executor に基づく他のユーティリティには、Future の一般的な拡張可能実装を提供する具象クラス FutureTask、および非同期タスクグループの処理調整を支援する ExecutorCompletionService が含まれます。

キュー

java.util.concurrent ConcurrentLinkedQueue クラスは、効率および拡張性が高く、スレッドセーフな非ブロッキング FIFO キューを提供します。java.util.concurrent の 5 つの実装 LinkedBlockingQueueArrayBlockingQueueSynchronousQueuePriorityBlockingQueue、および DelayQueue は、put および take のブロッキングバージョンを定義する、拡張された BlockingQueue インタフェースをサポートします。プロデューサ−コンシューマ、メッセージ処理、並行タスク実行、および関連する並行設計用のもっとも一般的な使用コンテキストは、異なるクラスの対象になります。

タイミング

TimeUnit クラスは、タイムアウトに基づく操作を指定および制御するための複数の詳細 (ナノ秒を含む) を提供します。パッケージ内の大半のクラスには、無制限の待機に加えてタイムアウトに基づく操作が含まれます。タイムアウトを使用する場合は常に、メソッドがタイムアウトを示す前に待機する必要のある最小時間が、タイムアウトにより指定されます。実装は、タイムアウトの発生後できるだけ早くそのことを検出するよう最善の努力を払いますが、タイムアウトの検出からタイムアウト後にスレッドが実際に再実行されまでの間に無制限の時間が経過する可能性があります。

シンクロナイザ

一般的に使用される特殊用途の同期を支援するために、4 つのクラスが使用されます Semaphore is a classic concurrency tool. CountDownLatch is a very simple yet verySemaphore は、標準的な並行処理ツールです。

CountDownLatch は、非常に単純ですが、指定された数の信号、イベント、または状態に達するまでブロックするための、一般的なユーティリティです。CyclicBarrier は、一部の並行プログラミングで役に立つ、設定可能な多重同期ポイントです。Exchanger を使用すると、2 つのスレッドが出会ったときにオブジェクトを交換することができます。これは、いくつかのパイプライン設計で有用です。

同時コレクション

このパッケージは、Queues に加え、マルチスレッドコンテキストでの使用を目的に設計されたいくつかの Collection 実装 (ConcurrentHashMapCopyOnWriteArrayList、および CopyOnWriteArraySet) を提供します。

このパッケージの一部のクラスで使用される接頭辞「Concurrent」は、類似の「synchronized」クラスといくつかの点で違いがあることを示します。たとえば、java.util.Hashtable および Collections.synchronizedMap(new HashMap()) は、同期化されます。ただし、ConcurrentHashMap は「同時」です。同時コレクションは、スレッドセーフですが、単一の排他ロックにより制御されません。ConcurrentHashMap の特定のケースでは、同時コレクションは任意数の同時読み込みおよび調節可能な数の同時書き込みを安全に許可します。「同期化された」クラスは、単一のロックを介したコレクションへのアクセスすべてを、スケーラビリティを犠牲にしても防ぐ必要がある場合に有用です。複数のスレッドが共通のコレクションにアクセスすることが予想される他の場合には、通常は「同時」バージョンの方が優れています。同期化されていないコレクションは、コレクションが共有されていないか、他のロックを保持している場合にのみアクセス可能な場合に優れています。

大半の同時 Collection 実装 (大半の Queue を含む) では、Iterator によりファストフェイルトラバーサルではなく「弱い一貫性」が提供される点も java.util の通常の規約とは異なります。弱い一貫性を持つ反復子はスレッドセーフですが、必ずしも反復中にコレクションをフリーズする必要はないため、反復子の作成以降の更新を反映することも反映しないことも可能です。

導入されたバージョン:
1.5

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。