JavaTM 2 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 類別是 Future 的一個實作,Future 可實作 Runnable,所以可通過 Executor 來執行。例如,可用下列內容替換上面帶有 submit 的建構:
     FutureTask<String> future =
       new FutureTask<String>(new Callable<String>() {
         public String call() {
           return searcher.search(target);
       }});
     executor.execute(future);


記憶體一致性效果:非同步計算採取的操作 happen-before 另一執行緒中緊跟在相應的 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 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only