源碼解讀系列之: Future和RunnableFuture

Future是在jdk1.5之后才加入進來,屬于java.util.concurrent.*框架中的一個接口.
Future接口定義了一個異步計算結果的規(guī)則.在Future類中的方法可以用來檢查計算是否完成, 等待計算完成, 取得計算結果. 結果只能通過方法get()來獲取, 他會阻塞等待計算結果;同時也可以取消一個異步計算任務,但是這個任務必須是要沒有開始執(zhí)行的.如果我們只想用Future來實現一個可以取消的任務而不是要獲取一個可用的計算結果,那么我們可以聲明為Future<?>,然后再get()方法中返回null.
Future的使用方式如下:

1. 直接使用Future,從ExecutorService中返回一個Future實例
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; }
  }
}

2. 使用FutureTask類,FutureTask是RunnableFuture接口的一個基本實現.
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
 public String call() {
   return searcher.search(target);
}});
executor.execute(future);

方法定義

下面看看Future接口里面定義的方法, 他的具體實現將在FutureTask中分析


boolean cancel(boolean mayInterruptIfRunning);
取消一個異步計算任務

boolean isCancelled();
判斷任務是否被取消

boolean isDone();
判斷任務是否完成, 任務完成的狀態(tài)標志包括:正常結束, 出現異常, 被取消

V get() throws InterruptedException, ExecutionException;
獲取異步任務結果

V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;
在給定的時間范圍內獲取異步任務結果

RunnableFuture(V)繼承自Future和Runnable,使得Future是可執(zhí)行的.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末网持,一起剝皮案震驚了整個濱河市社证,隨后出現的幾起案子懒豹,更是在濱河造成了極大的恐慌朝巫,老刑警劉巖浅蚪,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件收叶,死亡現場離奇詭異碟贾,居然都是意外死亡防嗡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門淮逊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催首,“玉大人,你說我怎么就攤上這事泄鹏±扇危” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵备籽,是天一觀的道長舶治。 經常有香客問我,道長车猬,這世上最難降的妖魔是什么霉猛? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮珠闰,結果婚禮上韩脏,老公的妹妹穿的比我還像新娘。我一直安慰自己铸磅,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布杭朱。 她就那樣靜靜地躺著阅仔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弧械。 梳的紋絲不亂的頭發(fā)上八酒,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音刃唐,去河邊找鬼羞迷。 笑死,一個胖子當著我的面吹牛画饥,可吹牛的內容都是我干的衔瓮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抖甘,長吁一口氣:“原來是場噩夢啊……” “哼热鞍!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薇宠,失蹤者是張志新(化名)和其女友劉穎偷办,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體澄港,經...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡椒涯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了回梧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片废岂。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漂辐,靈堂內的尸體忽然破棺而出泪喊,到底是詐尸還是另有隱情,我是刑警寧澤髓涯,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布袒啼,位于F島的核電站,受9級特大地震影響纬纪,放射性物質發(fā)生泄漏蚓再。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一包各、第九天 我趴在偏房一處隱蔽的房頂上張望摘仅。 院中可真熱鬧,春花似錦问畅、人聲如沸娃属。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾端。三九已至,卻和暖如春卵皂,著一層夾襖步出監(jiān)牢的瞬間秩铆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工灯变, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殴玛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓添祸,卻偏偏與公主長得像滚粟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刃泌,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容