1. 程式人生 > >多執行緒學習六:Future與FutureTask

多執行緒學習六:Future與FutureTask

FutureTask是Future介面的一個唯一實現類,可以作為Runnable被執行緒執行,也可以作為Future得到Callable的返回值。 Future就是對於具體的Runnable或者Callable任務的執行結果進行取消、查詢是否完成、獲取結果。必要時可以通過get方法獲取執行結果,該方法會阻塞直到任務返回結果。Future類位於java.util.concurrent包下,它是一個介面。本文主要闡述Future介面中宣告的5個方法的作用:

  1. Cancel(boolean mayInterruptIfRunning)
    此方法用來取消任務,如果取消任務成功則返回true,如果取消任務失敗則返回false。引數mayInterruptIfRunning表示是否允許取消正在執行卻沒有執行完畢的任務
    ,如果設定true,則表示可以取消正在執行過程中的任務。如果任務已經完成,則無論mayInterruptIfRunning為true還是false,此方法肯定返回false,即如果取消已經完成的任務會返回false;如果任務正在執行,若mayInterruptIfRunning設定為true,則返回true,若mayInterruptIfRunning設定為false,則返回false;如果任務還沒有執行,則無論mayInterruptIfRunning為true還是false,肯定返回true。
  2. isCancelled()
    此方法表示任務是否被取消成功,如果在任務正常完成前被取消成功,則返回 true。
  3. isDone()
    此方法表示任務是否已經完成,若任務完成,則返回true;
  4. get()
    此方法用來獲取執行結果,這個方法會產生阻塞,會一直等到任務執行完畢才返回;
  5. get(long timeout, TimeUnit unit)
    此方法用來獲取執行結果,如果在指定時間內,還沒獲取到結果,就直接返回null。