インタフェース | 説明 |
---|---|
BlockingDeque<E> |
要素の取得時に両端キューが空でなくなるまで待機したり、要素の格納時に両端キュー内に空きが生じるまで待機するブロック操作を追加でサポートしたりする
Deque です。 |
BlockingQueue<E> |
要素の取得時にキューが空でなくなるまで待機したり、要素の格納時にキュー内に空きが生じるまで待機する操作を追加でサポートしたりする
Queue です。 |
Callable<V> |
結果を返し、例外をスローすることがあるタスクです。
|
CompletionService<V> |
新しい非同期タスクの生成を、完了済みタスクの結果の消費から分離するサービスです。
|
ConcurrentMap<K,V> |
追加の原子的 putIfAbsent、remove、および replace メソッドを提供する
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> |
配列に連動する、制限付きのブロッキングキューです。
|
ConcurrentHashMap<K,V> |
取得の完全な同時性および予想される調整可能な更新平行性をサポートするハッシュテーブルです。
|
ConcurrentLinkedDeque<E> |
リンクノードに基づく、制限なしの並行両端キューです。
|
ConcurrentLinkedQueue<E> |
リンクノードに基づく、制限なしのスレッドセーフなキューです。
|
ConcurrentSkipListMap<K,V> |
スケーラブルな並行
ConcurrentNavigableMap 実装です。 |
ConcurrentSkipListSet<E> |
ConcurrentSkipListMap に基づくスケーラブルな並行 NavigableSet 実装です。 |
CopyOnWriteArrayList<E> |
基になる配列の新しいコピーを作成することにより、すべての推移的操作 (add、set など) が実装される
ArrayList のスレッドセーフな変数です。 |
CopyOnWriteArraySet<E> |
内部の
CopyOnWriteArrayList をすべてのオペレーションで使用する Set です。 |
CountDownLatch |
ほかのスレッドで実行中の操作セットが完了するまで、1 つ以上のスレッドを待機可能にする同期化支援機能です。
|
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 などの値を生成するタスクの結果を、そのタスクが取り消されたために取得できないことを示す例外です。 |
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 キューを提供します。
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
は「並行」(concurrent) です。並行処理コレクションはスレッドセーフですが、単一の排他ロックによる制御を受けません。ConcurrentHashMap の場合は、任意の数の並行読み込みと、調整可能な数の並行書き込みを安全に許可します。「synchronized」クラスは、コレクションへのすべてのアクセスを単一ロックで防ぐ必要がある場合に役立ちます。ただし、スケーラビリティーは低下します。一方、複数のスレッドが共通のコレクションにアクセスすることが予想される場合、通常は「concurrent」バージョンが適切です。コレクションが共有されていない場合、または別のロックを保持しているときにのみコレクションにアクセス可能である場合は、同期されていないコレクションを使うことをお勧めします。
また、ほとんどの並行処理 Collection 実装 (ほとんどの Queue を含む) は、それらの Iterator がフェイルファストのトラバーサルではなく弱一貫性を提供する点で、通常の java.util 規則とも異なります。弱一貫性イテレータはスレッドセーフですが、繰り返し処理時にコレクションをフリーズする必要はないため、イテレータの作成後の更新内容がすべて反映されることもあれば反映されないこともあります。
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, 2013, Oracle and/or its affiliates. All rights reserved.