| インタフェース | 説明 |
|---|---|
| BlockingDeque<E> |
要素の取得時に両端キューが空でなくなるまで待機したり、要素の格納時に両端キュー内に空きが生じるまで待機するブロック操作を追加でサポートしたりする
Dequeです。 |
| BlockingQueue<E> |
要素の取得時にキューが空でなくなるまで待機したり、要素の格納時にキュー内に空きが生じるまで待機する操作を追加でサポートしたりする
Queueです。 |
| Callable<V> |
結果を返し、例外をスローすることがあるタスクです。
|
| CompletableFuture.AsynchronousCompletionTask |
asyncメソッドによって生成された非同期タスクを識別するマーカー・インタフェースです。 |
| CompletionService<V> |
新しい非同期タスクの生成を、完了済みタスクの結果の消費から分離するサービスです。
|
| CompletionStage<T> |
CompletionStageが完了したときにアクションの実行または値の計算を行う、非同期の可能性がある計算のステージです。
|
| ConcurrentMap<K,V> |
スレッドの安全性と原子性の保証を提供する
Mapです。 |
| ConcurrentNavigableMap<K,V> |
NavigableMapオペレーションをサポートするConcurrentMapです。そのナビゲート可能なサブマップに対しては再帰的です。 |
| Delayed |
一定の遅延のあとに影響を受けるオブジェクトにマーク付けするための、混合スタイルのインタフェースです。
|
| Executor |
送信された
Runnableタスクを実行するオブジェクトです。 |
| ExecutorService | |
| ForkJoinPool.ForkJoinWorkerThreadFactory |
新しい
ForkJoinWorkerThreadを作成するためのファクトリです。 |
| ForkJoinPool.ManagedBlocker |
ForkJoinPool内で実行中のタスクについての管理対象の並列性を拡張するためのインタフェースです。 |
| Future<V> |
Futureは、非同期計算の結果を表します。 |
| RejectedExecutionHandler |
ThreadPoolExecutorで実行できないタスクのハンドラです。 |
| RunnableFuture<V> | |
| RunnableScheduledFuture<V> |
RunnableであるScheduledFutureです。 |
| ScheduledExecutorService |
指定された遅延時間後または定期的にコマンドを実行するようにスケジュールできる
ExecutorServiceです。 |
| ScheduledFuture<V> |
取消し可能な、遅延された結果生成アクションです。
|
| ThreadFactory |
要求に応じて新しいスレッドを作成するオブジェクトです。
|
| TransferQueue<E> |
コンシューマが要素を受け取るまでプロデューサが待機する
BlockingQueue。 |
| クラス | 説明 |
|---|---|
| AbstractExecutorService |
ExecutorService実行メソッドのデフォルト実装を提供します。 |
| ArrayBlockingQueue<E> |
配列に連動する、制限付きのブロッキング・キューです。
|
| CompletableFuture<T> |
明示的に(その値とステータスを設定して)完了できる
Futureです。その完了時に発生する依存関数およびアクションをサポートし、CompletionStageとして使用できます。 |
| ConcurrentHashMap<K,V> |
取得の完全な同時性および予想される高い更新平行性をサポートするハッシュ・テーブルです。
|
| ConcurrentHashMap.KeySetView<K,V> |
キーの
SetとしてのConcurrentHashMapのビューです。オプションで、共通の値にマップすることによって追加を有効化できます。 |
| ConcurrentLinkedDeque<E> |
リンク・ノードに基づく、制限なしの並行両端キューです。
|
| ConcurrentLinkedQueue<E> |
リンク・ノードに基づく、制限なしのスレッド・セーフなキューです。
|
| ConcurrentSkipListMap<K,V> |
スケーラブルな並行
ConcurrentNavigableMap実装です。 |
| ConcurrentSkipListSet<E> |
ConcurrentSkipListMapに基づくスケーラブルな並行NavigableSet実装です。 |
| CopyOnWriteArrayList<E> | |
| CopyOnWriteArraySet<E> |
内部の
CopyOnWriteArrayListをすべてのオペレーションで使用するSetです。 |
| CountDownLatch |
ほかのスレッドで実行中の操作セットが完了するまで、1つ以上のスレッドを待機可能にする同期化支援機能です。
|
| CountedCompleter<T> |
トリガーされた時点で保留中のアクションが残っていない場合に実行される完了アクションを含む
ForkJoinTaskです。 |
| CyclicBarrier |
スレッド・セットのそれぞれが共通のバリアー・ポイントに達するまで待機することを可能にする同期化支援機能です。
|
| DelayQueue<E extends Delayed> |
Delayed要素の制限なしの
ブロッキング・キューで、遅延時間が経過後にのみ、要素を取得できます。 |
| Exchanger<V> |
スレッドをペアにして、ペア内の要素を交換できる同期ポイント。
|
| ExecutorCompletionService<V> |
タスクの実行に、指定された
Executorを使用するCompletionServiceです。 |
| Executors |
このパッケージで定義された
Executor、ExecutorService、ScheduledExecutorService、ThreadFactory、およびCallableクラス用のファクトリおよびユーティリティ・メソッドです。 |
| ForkJoinPool |
ForkJoinTaskを実行するためのExecutorService。 |
| ForkJoinTask<V> |
ForkJoinPool内で実行する抽象基底クラスです。 |
| ForkJoinWorkerThread |
ForkJoinPoolによって管理されるスレッドであり、ForkJoinTaskを実行します。 |
| FutureTask<V> |
取消し可能な非同期計算です。
|
| LinkedBlockingDeque<E> |
リンク・ノードに基づく、オプションで制限付きになるブロッキング両端キューです。
|
| LinkedBlockingQueue<E> |
リンク・ノードに基づく、オプションで制限付きになるブロッキング・キューです。
|
| LinkedTransferQueue<E> |
リンク・ノードに基づく、制限なしの
TransferQueueです。 |
| Phaser |
再使用可能な同期化バリアーで、機能は
CyclicBarrierおよびCountDownLatchと同様ですが、より柔軟な使用方法をサポートします。 |
| PriorityBlockingQueue<E> |
クラス
PriorityQueueと同じ順序付けルールを使用するとともにブロッキング取得オペレーションを提供する、制限なしのブロッキング・キューです。 |
| RecursiveAction |
結果の出ない再帰的な
ForkJoinTask。 |
| RecursiveTask<V> |
結果を生成する再帰的な
ForkJoinTask。 |
| ScheduledThreadPoolExecutor |
指定された遅延時間後または定期的にコマンドを実行するようにスケジュールできる
ThreadPoolExecutorです。 |
| Semaphore |
計数セマフォです。
|
| SynchronousQueue<E> |
各挿入オペレーションが別のスレッドによる対応する削除オペレーションを待機する必要がある(およびその逆の) ブロッキング・キューです。
|
| ThreadLocalRandom |
現在のスレッドから独立した隔離された乱数ジェネレータ。
|
| ThreadPoolExecutor |
プールされた複数のスレッドの1つを使用して送信された各タスクを実行する
ExecutorServiceです。通常はExecutorsファクトリ・メソッドを使用して構成されます。 |
| ThreadPoolExecutor.AbortPolicy |
RejectedExecutionExceptionをスローする拒否されたタスクのハンドラです。 |
| ThreadPoolExecutor.CallerRunsPolicy |
executorがシャットダウンしていない場合に、
executeメソッドの呼出しスレッド内で、拒否されたタスクを直接実行する、拒否されたタスクのハンドラです。シャットダウンしている場合、タスクは破棄されます。 |
| ThreadPoolExecutor.DiscardOldestPolicy |
executorがシャットダウンしていない場合に、もっとも古い未処理の要求を破棄して
executeを再試行する、拒否されたタスクのハンドラです。シャットダウンしている場合、タスクは破棄されます。 |
| ThreadPoolExecutor.DiscardPolicy |
拒否されたタスクを通知なしで破棄する拒否されたタスクのハンドラです。
|
| 列挙型 | 説明 |
|---|---|
| TimeUnit |
TimeUnitは、指定された粒度単位でデュレーションを表し、単位を変換したり、それらの単位でタイミングおよび遅延操作を実行したりするユーティリティ・メソッドを提供します。 |
| 例外 | 説明 |
|---|---|
| BrokenBarrierException |
スレッドが故障状態にあるバリアーを待機しようとしているとき、または待機中にバリアーが故障状態になったときに、例外をスローします。
|
| CancellationException |
FutureTaskなどの値を生成するタスクの結果を、そのタスクが取り消されたために取得できないことを示す例外です。 |
| CompletionException |
結果またはタスクを完了する過程でエラーまたはその他の例外が検出されたときにスローされる例外です。
|
| ExecutionException |
例外をスローすることによって中断したタスクの結果を取得しようとしたときにスローされる例外です。
|
| RejectedExecutionException |
タスクが実行対象として受け入れ不可能な場合に、
Executorによってスローされる例外です。 |
| TimeoutException |
ブロック操作がタイム・アウトしたときにスローされる例外です。
|
java.util.concurrent.locksパッケージとjava.util.concurrent.atomicパッケージも参照してください。
Executorは、スレッドに似たカスタム・サブシステム(スレッド・プール、非同期入出力、軽量タスク・フレームワークなど)を定義するための、標準化された単純なインタフェースです。使用している具象Executorクラスに応じて、タスクは新しく作成されたスレッド、既存のタスク実行スレッド、またはexecuteを呼び出すスレッドで、順次にまたは並行して実行されます。ExecutorServiceでは、より完全な非同期タスク実行フレームワークが用意されています。ExecutorServiceは、タスクのキューイングとスケジュール設定を管理し、制御されたシャットダウンを可能にします。ScheduledExecutorServiceサブインタフェースとそれに関連付けられたインタフェースは、遅延されたまたは定期的なタスク実行のサポートが追加されています。ExecutorServiceには、Callable (Runnableに類似し、結果を生成)として表される任意の関数の非同期実行を調整するメソッドが用意されています。Futureは、関数の結果を返したり、実行が完了したかどうかの判断を可能にしたりするほか、実行を取り消す方法を提供します。RunnableFutureは、runメソッドを所有するFutureで、実行時にその結果を設定します。
実装。ThreadPoolExecutorクラスとScheduledThreadPoolExecutorクラスは、調整可能で、柔軟なスレッド・プールを提供します。Executorsクラスには、もっとも一般的なExecutorの種類と設定のためのファクトリ・メソッドと、そのようなexecutorを使用するためのユーティリティ・メソッドがいくつかあります。Executorsを基にしたその他のユーティリティには、Futureの一般的な拡張可能な実装を提供する具象クラスFutureTaskや、非同期タスクのグループの処理の調整を支援するExecutorCompletionServiceなどがあります。
ForkJoinPoolクラスは、主にForkJoinTaskとそのサブクラスのインスタンスを処理するために設計されたExecutorを提供します。これらのクラスは、計算量の多い並行処理でしばしば適用される制限に従ったタスクで高いスループットを得る、work-stealingスケジューラを使用します。
ConcurrentLinkedQueueクラスは、効率的でスケーラブルな、スレッド・セーフの非ブロックFIFOキューを提供します。ConcurrentLinkedDequeクラスとほぼ同じですが、Dequeインタフェースを追加でサポートします。
java.util.concurrent内の5つの実装、つまりLinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、PriorityBlockingQueue、およびDelayQueueは、putとtakeのブロック・バージョンを定義する拡張されたBlockingQueueインタフェースをサポートします。さまざまなクラスで、プロデューサ - コンシューマ、メッセージング、並列タスク実行、関連する並行設計などに対するもっとも一般的な使用コンテキストを網羅します。
拡張されたTransferQueueインタフェース、およびLinkedTransferQueue実装では、プロデューサが必要に応じてそのコンシューマの待機をブロックできる、同期transferメソッド(および関連する機能)が導入されます。
BlockingDequeインタフェースはBlockingQueueを拡張して、FIFOとLIFO (スタック・ベース)の両方のオペレーションをサポートします。LinkedBlockingDequeクラスは、実装を提供します。
TimeUnitクラスは、タイムアウト・ベースのオペレーションの指定および制御に対して、複数の粒度(ナノ秒単位まで)を提供します。パッケージのほとんどのクラスには、無期限に待機するオペレーションだけでなく、タイムアウト・ベースのオペレーションが含まれています。タイム・アウトを使用するすべての場合で、タイム・アウト値は、メソッドがタイム・アウトしたことを示すまで待機する最小時間を指定します。タイム・アウトの発生後できるだけ早くそれを検出するために、実装では「最大限の努力」を行います。ただし、検出されたタイム・アウトからそのタイム・アウト後にスレッドが実際に再実行されるまでには、無期限に時間が経過することもあります。タイムアウト・パラメータを受け入れるすべてのメソッドで、ゼロ以下の値をまったく待機しないものとして扱います。「永遠に」待機するには、Long.MAX_VALUEの値を使用できます。
Semaphoreは、従来の並行処理ツールです。
CountDownLatchは、非常に単純ですがよく使われるユーティリティで、指定された数のシグナル、イベント、または条件を保持するまでブロックします。
CyclicBarrierは、リセット可能な多用途の同期ポイントであり、一部の形式の並行プログラミングで有用です。
Phaserは、複数のスレッドにわたる段階的な計算を制御するために使用できる、より柔軟な形式のバリアーを提供します。
Exchangerでは、2つのスレッドがランデブー・ポイントでオブジェクトを交換するようにできます。これは、いくつかのパイプライン設計で有用です。
ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、CopyOnWriteArrayList、およびCopyOnWriteArraySetが提供されます。特定のコレクションに多数のスレッドがアクセスすることが想定される場合は、通常、同期されたHashMapよりもConcurrentHashMap、同期されたTreeMapよりもConcurrentSkipListMapを使用することをお薦めします。読み込みとトラバーサルの予想数がリストの更新数よりはるかに多い場合は、同期されたArrayListよりCopyOnWriteArrayListを使用することをお薦めします。
このパッケージの一部のクラスに使用される「Concurrent」接頭辞は、類似した「synchronized」クラスとは異なる点がいくつかあることを簡潔に表すためのものです。たとえば、java.util.HashtableとCollections.synchronizedMap(new HashMap())は同期されます。しかし、ConcurrentHashMapは並行です。並行処理コレクションはスレッド・セーフですが、単一の排他ロックによる制御を受けません。ConcurrentHashMapの場合は、任意の数の並行読み込みと、調整可能な数の並行書込みを安全に許可します。「synchronized」クラスは、コレクションへのすべてのアクセスを単一ロックで防ぐ必要がある場合に役立ちます。ただし、スケーラビリティは低下します。一方、複数のスレッドが共通のコレクションにアクセスすることが予想される場合、通常は「concurrent」バージョンが適切です。コレクションが共有されていない場合、または別のロックを保持しているときにのみコレクションにアクセス可能である場合は、同期されていないコレクションを使うことをお薦めします。
ほとんどの並行処理Collection実装(ほとんどのQueueを含む)は、それらのイテレータおよびスプリッテレータがフェイルファストのトラバーサルではなく弱一貫性を提供する点で、通常のjava.util規則とも異なります。
ConcurrentModificationExceptionをスローしません。
synchronized構文とvolatile構文のほか、Thread.start()メソッドとThread.join()メソッドがhappens-before関係を形成できます。特に次の点が重要です。
synchronizedブロックまたはメソッドの終了)は、同じモニターでの以降のどのロック(synchronizedブロックまたはメソッドのエントリ)よりも前に発生します。また、happens-before関係は推移的であるため、ロック解除の前のスレッドのすべてのアクションは、そのモニターをロックするあらゆるスレッドに続くすべてのアクションの前に発生します。
volatileフィールドへの書込みは、その同じフィールドの以降のどの読み取りよりも前に発生します。volatileフィールドの書き込みと読取りには、モニターのエントリおよび終了と同様のメモリー整合性効果がありますが、相互排他ロックは伴いません。
startの呼出しは、開始されたスレッド内のあらゆるアクションの前に発生します。
joinからほかのスレッドが正常に復帰する前に発生します。
java.util.concurrentとそのサブパッケージ内のすべてのクラスのメソッドは、これらの保証をより高いレベルの同期にまで拡張します。特に次の点が重要です。
RunnableをExecutorに送信する前のスレッド内のアクションは、その実行が開始される前に発生します。ExecutorServiceに送信されるCallablesについても同様です。
Futureで表される非同期計算によって実行されるアクションは、別のスレッド内のFuture.get()による結果の取得に続くアクションの前に発生します。
Lock.unlock、Semaphore.release、CountDownLatch.countDownなどのシンクロナイザ「解放」メソッドの前のアクションは、別のスレッド内の同じシンクロナイザ・オブジェクトに対するLock.lock、Semaphore.acquire、Condition.await、CountDownLatch.awaitなどの正常終了した「取得」メソッドに続くアクションの前に発生します。
Exchangerを介してオブジェクトを正常に交換するスレッドのペアごとに、各スレッド内のexchange()の前のアクションは、もう一方のスレッド内の対応するexchange()に続くアクションの前に発生します。
CyclicBarrier.awaitとPhaser.awaitAdvance (およびそのバリアント)を呼び出す前のアクションは、バリアー・アクションによって実行されるアクションの前に発生し、そのバリアー・アクションによって実行されるアクションは、ほかのスレッド内の対応するawaitからの正常な復帰に続くアクションの前に発生します。
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.