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)
cancelの呼出し時にこのタスクが起動しなかった場合、このタスクが実行されることはありません。タスクが起動済みの場合は、このタスクの停止を試みる際、このタスクを実行しているスレッドに割り込む必要があるかどうかは、mayInterruptIfRunningパラメータで判断します。
このメソッドが復帰すると、その後のisDone()の呼出しは常にtrueを返します。このメソッドがtrueを返した場合、後続のisCancelled()の呼出しは常にtrueを返します。
mayInterruptIfRunning - このタスクを実行しているスレッドに割り込む必要がある場合はtrue、そうでない場合は、実行中のタスクを完了できるfalse (通常はタスクがすでに正常に完了していたため)、そうでない場合はtrueboolean isCancelled()
trueを返します。trueboolean isDone()
trueを返します。完了の理由は、正常終了、例外、取り消しなどがありますが、いずれの場合もこのメソッドはtrueを返します。trueV get() throws InterruptedException, ExecutionException
CancellationException - 計算が取り消された場合ExecutionException - 計算で例外がスローされた場合InterruptedException - 待機中に現在のスレッドで割込みが発生した場合V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
timeout - 待機する最長時間unit - timeout引数の時間単位CancellationException - 計算が取り消された場合ExecutionException - 計算で例外がスローされた場合InterruptedException - 待機中に現在のスレッドで割込みが発生した場合TimeoutException - 待機がタイム・アウトになった場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.