在java多線程編程中,我們經(jīng)常使用線程池提交任務,并且通過Future來獲取任務執(zhí)行的結(jié)果,以此達到異步或者并行執(zhí)行的效果。在jdk1.7以前,F(xiàn)utureTask是Future唯一的實現(xiàn)類,1.7后加入了ForkJoinTask類。本文主要總結(jié)一下我對FutureTask的理解。

Future類

  Future接口定義了5個方法,分別是 

 boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); 
 boolean isDone(); 
 V get() throws InterruptedException, ExecutionException; 
 V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

    分別介紹一下這五個接口的用途:

  • boolean cancel(boolean mayInterruptInRunning) 取消一個正在執(zhí)行中的任務,并且返回調(diào)用結(jié)果。如果取消成功則返回true,反之返回false。這里要注意,即使方法返回true,當前任務也未必真的被取消了,后面會介紹。

  • boolean isCancelled() 返回當前任務是否被取消。

  • Boolean isDone() 返回當前任務是否執(zhí)行完畢。這里done的概念比較廣,包括了futureTask被執(zhí)行后的任意狀態(tài),例如正常執(zhí)行完畢、執(zhí)行異?;蛘呷蝿毡蝗∠?。

  • V get() 這個接口就是用來獲取futureTask執(zhí)行結(jié)果,調(diào)用這個接口時會被阻塞,直到拿到結(jié)果或者異常。

  • V get(long timeout, TimeUnit unit) 這個接口多了一個超時時間,如果過了這個時間task仍然沒有結(jié)果返回,則拋出timeout異常

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式