|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface ExecutorService
終了を管理するメソッド、および 1 つ以上の非同期タスクの進行状況を追跡する Future
を生成できるメソッドを提供する Executor
です。
ExecutorService は、新規タスクを拒否するシャットダウンが可能です。ExecutorService をシャットダウンするための 2 つの異なるメソッドが提供されています。shutdown()
メソッドは以前に送信したタスクを終了前に実行することができ、shutdownNow()
メソッドは待機中のタスクが開始されないようにし、現在実行中のタスクを停止しようとします。終了時、executor には、実行中のアクティブなタスクや実行を待機中のタスクは存在せず、新規タスクを送信することもできません。未使用の ExecutorService は、そのリソースを再生可能にするにはシャットダウンされなければいけません。
submit メソッドは、実行の取り消しや完了の待機に使用できる Future
を作成して返すことにより、基底メソッド Executor.execute(java.lang.Runnable)
を拡張します。invokeAny および invokeAll メソッドは、もっとも一般的に使用される方法で一括実行を行い、タスクのコレクションを実行して、1 つ以上またはすべてが完了するのを待機します。ExecutorCompletionService
クラスを、これらのメソッドのカスタマイズされたバリアントの書き込みに使用できます。
Executors
クラスは、このパッケージで提供される executor サービス用のファクトリメソッドを提供します。
Executors.newFixedThreadPool(int)
ファクトリメソッドを使用します。
class NetworkService implements Runnable { private final ServerSocket serverSocket; private final ExecutorService pool; public NetworkService(int port, int poolSize) throws IOException { serverSocket = new ServerSocket(port); pool = Executors.newFixedThreadPool(poolSize); } public void run() { // run the service try { for (;;) { pool.execute(new Handler(serverSocket.accept())); } } catch (IOException ex) { pool.shutdown(); } } } class Handler implements Runnable { private final Socket socket; Handler(Socket socket) { this.socket = socket; } public void run() { // read and service request on socket } }次のメソッドは、ExecutorService を 2 段階でシャットダウンします。最初に shutdown を呼び出して着信タスクを拒否し、次に、必要に応じて shutdownNow を呼び出して中途のタスクを取り消します。
void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); // Disable new tasks from being submitted try { // Wait a while for existing tasks to terminate if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Cancel currently executing tasks // Wait a while for tasks to respond to being cancelled if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { // (Re-)Cancel if current thread also interrupted pool.shutdownNow(); // Preserve interrupt status Thread.currentThread().interrupt(); } }
メモリー整合性効果:Runnable
または Callable
タスクを ExecutorService
に送信する前のスレッド内のアクションは、そのタスクによって行われるアクションよりも happen-before であり、一方それは、Future.get()
によって取得される結果よりも happen-before です。
メソッドの概要 | ||
---|---|---|
boolean |
awaitTermination(long timeout,
TimeUnit unit)
シャットダウン要求後にすべてのタスクが実行を完了していたか、タイムアウトが発生するか、現在のスレッドで割り込みが発生するか、そのいずれかが最初に発生するまでブロックします。 |
|
|
invokeAll(Collection<? extends Callable<T>> tasks)
指定されたタスクを実行し、すべて完了すると、ステータスと結果を含む Future のリストを返します。 |
|
|
invokeAll(Collection<? extends Callable<T>> tasks,
long timeout,
TimeUnit unit)
指定されたタスクを実行し、すべてが完了するか時間切れになるか、そのいずれかが最初に発生した時点で、ステータスと結果を含む Future のリストを返します。 |
|
|
invokeAny(Collection<? extends Callable<T>> tasks)
指定されたタスクを実行し、例外をスローせずに正常に完了したタスクが存在する場合は、その結果を返します。 |
|
|
invokeAny(Collection<? extends Callable<T>> tasks,
long timeout,
TimeUnit unit)
指定されたタスクを実行し、タイムアウトが経過する前に例外をスローせずに正常に完了したタスクが存在する場合は、その結果を返します。 |
|
boolean |
isShutdown()
この executor がシャットダウンしていた場合、true を返します。 |
|
boolean |
isTerminated()
シャットダウンに続いてすべてのタスクが完了していた場合、true を返します。 |
|
void |
shutdown()
順序正しくシャットダウンを開始します。 |
|
List<Runnable> |
shutdownNow()
実行中のアクティブなタスクすべての停止を試み、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返します。 |
|
|
submit(Callable<T> task)
値を返す実行用タスクを送信して、保留状態のタスク結果を表す Future を返します。 |
|
Future<?> |
submit(Runnable task)
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。 |
|
|
submit(Runnable task,
T result)
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。 |
インタフェース java.util.concurrent.Executor から継承されたメソッド |
---|
execute |
メソッドの詳細 |
---|
void shutdown()
SecurityException
- セキュリティーマネージャーが存在する状況でこの ExecutorService のシャットダウンを実行すると、呼び出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread") を保持しないか、セキュリティーマネージャーの checkAccess メソッドがアクセスを拒否するためであるList<Runnable> shutdownNow()
実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。たとえば、通常の実装では Thread.interrupt()
を介して取り消しが行われるため、タスクが割り込みに対する応答に失敗すると、タスクが終了しなくなる可能性があります。
SecurityException
- セキュリティーマネージャーが存在する状況でこの ExecutorService のシャットダウンを実行すると、呼び出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread") を保持しないか、セキュリティーマネージャーの checkAccess メソッドがアクセスを拒否するためであるboolean isShutdown()
boolean isTerminated()
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
timeout
- 待機する最長時間unit
- timeout 引数の時間単位
InterruptedException
- 待機中に割り込みが発生した場合<T> Future<T> submit(Callable<T> task)
タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get(); の形式の構築を使用できます。
注:Executors
クラスには、クロージャーに似たほかの一般オブジェクトを変換できるメソッドセットが含まれます。たとえば、PrivilegedAction
を Callable
形式に変換して、送信可能にすることができます。
task
- 送信するタスク
RejectedExecutionException
- タスクの実行をスケジュールできない場合
NullPointerException
- タスクが null の場合<T> Future<T> submit(Runnable task, T result)
task
- 送信するタスクresult
- 返す結果
RejectedExecutionException
- タスクの実行をスケジュールできない場合
NullPointerException
- タスクが null の場合Future<?> submit(Runnable task)
task
- 送信するタスク
RejectedExecutionException
- タスクの実行をスケジュールできない場合
NullPointerException
- タスクが null の場合<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
Future.isDone()
は true になります。「完了した」タスクは、通常どおりか例外をスローすることで終了しています。オペレーションの進行中に、指定されたコレクションが変更された場合、このメソッドの結果は定義されていません。
tasks
- タスクのコレクション
InterruptedException
- 待機中に割り込みが発生した場合。この場合、未完了のタスクは取り消される。
NullPointerException
- タスクまたはそのいずれかの要素が null の場合
RejectedExecutionException
- いずれかのタスクの実行をスケジュールできない場合<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException
Future.isDone()
は true になります。返された時点で、完了していないタスクは取り消されます。「完了した」タスクは、通常どおりか例外をスローすることで終了しています。オペレーションの進行中に、指定されたコレクションが変更された場合、このメソッドの結果は定義されていません。
tasks
- タスクのコレクションtimeout
- 待機する最長時間unit
- timeout 引数の時間単位
InterruptedException
- 待機中に割り込みが発生した場合。この場合、未完了のタスクは取り消される
NullPointerException
- タスク、その要素のいずれか、または単位が null の場合
RejectedExecutionException
- いずれかのタスクの実行をスケジュールできない場合<T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException
tasks
- タスクのコレクション
InterruptedException
- 待機中に割り込みが発生した場合
NullPointerException
- タスクまたはそのいずれかの要素が null の場合
IllegalArgumentException
- タスクが空の場合
ExecutionException
- 正常に完了したタスクがない場合
RejectedExecutionException
- タスクの実行をスケジュールできない場合<T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
tasks
- タスクのコレクションtimeout
- 待機する最長時間unit
- timeout 引数の時間単位
InterruptedException
- 待機中に割り込みが発生した場合
NullPointerException
- タスク、その要素のいずれか、または単位が null の場合
TimeoutException
- タスクが正常に完了する前に、指定されたタイムアウトが経過した場合
ExecutionException
- 正常に完了したタスクがない場合
RejectedExecutionException
- タスクの実行をスケジュールできない場合
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。