|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
V
- この Future の get メソッドで返される結果型public interface Future<V>
Future は、非同期計算の結果を表します。計算が完了したかどうかのチェック、完了までの待機、計算結果の取得などを行うためのメソッドが用意されています。結果は、計算の完了時に get メソッドを使用して取得する必要があり、必要に応じて準備ができるまでブロックします。取り消しを実行するには、cancel メソッドを使用します。タスクが正常に完了したか取り消されたかを判断するための追加メソッドもあります。計算が完了すると、その計算を取り消すことはできません。利用可能な結果を得るためではなく、取り消し機能として Future を使用する場合は、Future<?> という形式の型を宣言し、基本となるタスクの結果として null を返すようにすることもできます。
使用例 (次のクラスはすべて架空のものです。)
interface ArchiveSearcher { String search(String target); } class App { ExecutorService executor = ... ArchiveSearcher searcher = ... void showSearch(final String target) throws InterruptedException { Future<String> future = executor.submit(new Callable<String>() { public String call() { return searcher.search(target); }}); displayOtherThings(); // do other things while searching try { displayText(future.get()); // use future } catch (ExecutionException ex) { cleanup(); return; } } }
FutureTask
クラスは、Runnable を実装する Future の実装であり、そのため Executor によって実行されることがあります。たとえば、submit を使用した前述の構築は、次のように置き換えられます。
FutureTask<String> future = new FutureTask<String>(new Callable<String>() { public String call() { return searcher.search(target); }}); executor.execute(future);
メモリー整合性効果:非同期計算で発生するアクションは、別のスレッドで対応する Future.get()
に続くアクションの「前に発生」します。
FutureTask
,
Executor
メソッドの概要 | |
---|---|
boolean |
cancel(boolean mayInterruptIfRunning)
このタスクの実行の取り消しを試みます。 |
V |
get()
必要に応じて計算が完了するまで待機し、その後、計算結果を取得します。 |
V |
get(long timeout,
TimeUnit unit)
必要に応じて、最大で指定された時間、計算が完了するまで待機し、その後、計算結果が利用可能な場合は結果を取得します。 |
boolean |
isCancelled()
このタスクが正常に完了する前に取り消された場合は true を返します。 |
boolean |
isDone()
このタスクが完了した場合は true を返します。 |
メソッドの詳細 |
---|
boolean cancel(boolean mayInterruptIfRunning)
このメソッドが復帰したあと、以降の isDone()
の呼び出しでは常に true が返されます。このメソッドが true を返した場合、以降の isCancelled()
の呼び出しでは常に true が返されます。
mayInterruptIfRunning
- このタスクを実行しているスレッドに割り込む必要がある場合は true、そうでない場合は、実行中のタスクを完了できる
boolean isCancelled()
boolean isDone()
V get() throws InterruptedException, ExecutionException
CancellationException
- 計算が取り消された場合
ExecutionException
- 計算で例外がスローされた場合
InterruptedException
- 待機中に現在のスレッドで割り込みが発生した場合V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
timeout
- 待機する最長時間unit
- timeout 引数の時間単位
CancellationException
- 計算が取り消された場合
ExecutionException
- 計算で例外がスローされた場合
InterruptedException
- 待機中に現在のスレッドで割り込みが発生した場合
TimeoutException
- 待機がタイムアウトになった場合
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。