Java並行設計筆記

java.util.concurrent.Future 介面

Future就是對於具體的Runnable或者Callable任務的執行結果進行取消、查詢是否完成、獲取結果。必要時可以通過get方法獲取執行結果,該方法會阻塞直到任務返回結果。

Future的五個方法:

  1. cancel(boolean mayInterruptIfRunning) : cancel方法是用來取消任務,若取消任務成功則返回true,若取消任務失敗則返回false。
    參數mayInterruptIfRunning表示是否允許取消正在執行卻沒有執行完畢的任務,若設置true,則表示可以取消正在執行過程中的任務。若任務已經完成,則無論mayInterruptIfRunning為true還是false,則一定返回false,;若任務正在執行,則返回值即為mayInterruptIfRunning的設置;若任務還沒有執行,則無論mayInterruptIfRunning為true還是false,一定返回true。
    在這個方法呼叫完成後,再去呼叫isDone(),isDone()將總是回傳true 。
    原文 :
    After this method returns, subsequent calls to isDone() will always return true.
    上面這句原文應該要排除一種情況:若任務還在執行中,呼叫cancel傳入參數mayInterruptIfRunning設置為false,則再去呼叫isDone(),理論上isDone不一定會回傳true。
  2. isCancel(): 若任務在正常完成前被取消則回傳true; 也就是有執行cancel()方法,且回傳true(表示任務被成功取消)。
  3. isDone(): 當任務完成時,回傳true; 這個完成可能是正常的執行結束,也可能是因為例外發生結束或是被強制取消任務執行的結束。

  4. get(): 這個方法會產生阻塞,一直等待,直到任務執行完畢返回結果

  5. get(long timeout,TimeUnit unit) : 此方法與get()差別在於等待指定的timeout時間後,還無法取得執行結果,則拋出TimeoutException。

public synchronized void myMethod() {
//code
Class
}