java.util.concurrent
インタフェース Future<V>
- 型パラメータ:
V
- この Future の get メソッドにより返される結果の型
- 既知のサブインタフェースの一覧:
- ScheduledFuture<V>
- 既知の実装クラスの一覧:
- FutureTask
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);
- 導入されたバージョン:
- 1.5
- 関連項目:
FutureTask
,
Executor
メソッドの概要 |
boolean |
cancel(boolean mayInterruptIfRunning)
このタスクの実行の取り消しを試みます。 |
V |
get()
必要に応じて計算が完了するまで待機し、その後、結果を取得します。 |
V |
get(long timeout,
TimeUnit unit)
必要に応じて、計算が完了するのを指定された時間まで待機します。 |
boolean |
isCancelled()
このタスクが通常どおり完了する前に取り消された場合は true を返します。 |
boolean |
isDone()
このタスクが完了した場合は、true を返します。 |
cancel
boolean cancel(boolean mayInterruptIfRunning)
- このタスクの実行の取り消しを試みます。タスクが完了しているか、取り消されているか、他の何らかの理由で取り消すことができない場合、この試みは失敗します。実行の取り消しが成功し、cancel が呼び出されたときにこのタスクが開始されていない場合、このタスクは決して実行されません。タスクがすでに起動している場合、mayInterruptIfRunning パラメータは、このタスクを停止するために、タスクを実行中のスレッドに割り込みを行う必要があるかどうかを判別します。
- パラメータ:
mayInterruptIfRunning
- このタスクを実行中のスレッドに割り込みを行う必要がある場合は true、そうでない場合は、進行中のタスクが完了することが許可される
- 戻り値:
- タスクはすでに正常に完了しているなどの理由でタスクを取り消すことができない場合は false、そうでない場合は true
isCancelled
boolean isCancelled()
- このタスクが通常どおり完了する前に取り消された場合は true を返します。
- 戻り値:
- タスクが完了する前に取り消された場合は true
isDone
boolean isDone()
- このタスクが完了した場合は、true を返します。
完了の原因には、正常終了、例外、または取り消しがあります。これらのどの場合でも、このメソッドは true を返します。
- 戻り値:
- このタスクが完了した場合は、true
get
V get()
throws InterruptedException,
ExecutionException
- 必要に応じて計算が完了するまで待機し、その後、結果を取得します。
- 戻り値:
- 計算結果
- 例外:
CancellationException
- 計算が取り消された場合
ExecutionException
- 計算により例外がスローされた場合
InterruptedException
- 待機中に、現在のスレッドで割り込みが発生した場合
get
V get(long timeout,
TimeUnit unit)
throws InterruptedException,
ExecutionException,
TimeoutException
- 必要に応じて、計算が完了するのを指定された時間まで待機します。その後、可能であれば結果を取得します。
- パラメータ:
timeout
- 待機する最長時間unit
- timeout 引数の時間単位
- 戻り値:
- 計算結果
- 例外:
CancellationException
- 計算が取り消された場合
ExecutionException
- 計算により例外がスローされた場合
InterruptedException
- 待機中に、現在のスレッドで割り込みが発生した場合
TimeoutException
- 指定された待機時間が経過した場合
バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。