JavaTM 2 Platform
Standard Ed. 5.0

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 - 指定された待機時間が経過した場合

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。