モジュール java.base
パッケージ java.util.concurrent

インタフェースFuture<V>

型パラメータ:
V - このFutureのgetメソッドで返される結果型
既知のすべてのサブインタフェース:
RunnableFuture<V>, RunnableScheduledFuture<V>, ScheduledFuture<V>
既知のすべての実装クラス:
CompletableFuture, CountedCompleter, ForkJoinTask, FutureTask, RecursiveAction, RecursiveTask, SwingWorker

public interface Future<V>
Futureは、非同期計算の結果を表します。 計算が完了したかどうかのチェック、完了までの待機、計算結果の取得などを行うためのメソッドが用意されています。 この結果は、計算が完了したときに、必要に応じて準備ができるまでブロックしながらgetメソッドを使用して取得するしかありません。 取消しは、cancelメソッドによって実行されます。 タスクが正常に完了したか取り消されたかを判断するための追加メソッドもあります。 計算が完了すると、その計算を取り消すことはできません。 利用可能な結果を得るためではなく、取消し機能としてFutureを使用する場合は、Future<?>という形式の型を宣言し、基本となるタスクの結果としてnullを返すようにすることもできます。

使用例 (次のクラスはすべて架空のものです。)

 
 interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...;
   ArchiveSearcher searcher = ...;
   void showSearch(String target) throws InterruptedException {
     Callable<String> task = () -> searcher.search(target);
     Future<String> future = executor.submit(task);
     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<>(task);
 executor.execute(future);

メモリー整合性効果: 非同期計算によって実行されるアクションは、別のスレッド内の対応するFuture.get()に続くアクションの前に発生します。

導入されたバージョン:
1.5
関連項目: