在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異常
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26