JavaTM Platform
Standard Ed. 6

java.util.concurrent
インタフェース Future<V>

型パラメータ:
V - この Future の get メソッドで返される結果型
既知のサブインタフェースの一覧:
Response<T>, RunnableFuture<V>, RunnableScheduledFuture<V>, ScheduledFuture<V>
既知の実装クラスの一覧:
FutureTask, 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(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() に続くアクションの「前に発生」します。

導入されたバージョン:
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 パラメータで判断します。

このメソッドが復帰したあと、以降の isDone() の呼び出しでは常に true が返されます。このメソッドが true を返した場合、以降の isCancelled() の呼び出しでは常に true が返されます。

パラメータ:
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 Platform
Standard Ed. 6

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

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