深入理解Future體系

FutureTask類實(shí)現(xiàn)了RunnableFuture接口,

而RunnableFuture繼承了Runnable和Future,

也就是說FutureTask既是Runnable寿冕,也是Future唐础。

因此FuntureTask可以直接作為Thread的構(gòu)造參數(shù)直接使用了彤枢。

Callable接口

@FunctionalInterfacepublicinterfaceCallable{Vcall()throwsException;}

Callable接口類似于Runnable惨篱,都是為了成為其它線程的執(zhí)行單元而被設(shè)計(jì)出來的,但與Runnable不同的是收厨,Callable接口不僅擁有返回值晋柱,還會(huì)拋出異常。

Future接口

Future表示的是異步計(jì)算的結(jié)果诵叁,在Future接口中雁竞,提供了一些用于檢查任務(wù)執(zhí)行是否完成,等待任務(wù)執(zhí)行完成和取出任務(wù)執(zhí)行結(jié)果的方法拧额。

當(dāng)運(yùn)算完成后只能通過get()方法進(jìn)行檢索碑诉,并且調(diào)用了get()方法后出阻塞當(dāng)前線程直到任務(wù)執(zhí)行完成。

通過cancel()方法侥锦,可以取消任務(wù)进栽。

通過isCancelled()方法,可以判斷任務(wù)是否被取消了

通過isDone()方法恭垦,可以判斷任務(wù)是否已經(jīng)完成了

RunnableFuture接口

RunnableFuture 繼承自Runnable和Future快毛,即提供了可以使用Runnable來執(zhí)行任務(wù),又可以使用Future執(zhí)行獲取結(jié)果的功能番挺,同時(shí)還擁有了取消任務(wù)唠帝,判斷任務(wù)狀態(tài)的功能

FutureTask

一個(gè)異步可取消計(jì)算,F(xiàn)utureTask提供了Future接口的基本實(shí)現(xiàn)玄柏,其中包含開始執(zhí)行任務(wù)和結(jié)束任務(wù)的方法襟衰,查詢?nèi)蝿?wù)執(zhí)行是否完成的方法,或者獲取任務(wù)結(jié)果的方法粪摘,等等瀑晒。僅當(dāng)任務(wù)執(zhí)行完成了阀湿,才能獲取到結(jié)果。

并且調(diào)用get()方法會(huì)阻塞當(dāng)前線程直到任務(wù)執(zhí)行完成瑰妄,如果任務(wù)已經(jīng)完成了,不能重新開始或者取消映砖,除非這個(gè)任務(wù)調(diào)用了runAndReset()方法间坐。(Executes the computation without setting its result, and then?resets this future to initial state, failing to do so if thecomputation encounters an exception or is cancelled.? This is designed for use with tasks that intrinsically execute more* than once.)

FutureTask可以包裝一個(gè)Callable或者是Runnable,因?yàn)镕utureTask實(shí)現(xiàn)了Runnable對(duì)象(Callable接口類似于Runnable,Callable相對(duì)于Runnable來說,僅僅多了一個(gè)返回值和Exception拋出而已)邑退,我們可以把一個(gè)FutureTask提交給線程池的Executor來執(zhí)行竹宋。FutureTask,除了作為一個(gè)單獨(dú)的類之外地技,它的protected 方法在我們自定義Task的時(shí)候是非常有用的蜈七。

FutureTask源碼分析

你是如何拿到一個(gè)線程的執(zhí)行結(jié)果的?Future體系源碼深度解析 - 簡(jiǎn)書

可以根據(jù)這個(gè)文章來看

在實(shí)現(xiàn)的 方法種有個(gè)run方法 其中有用到

UNSAFE.compareAndSwapObject(this, runnerOffset,null, Thread.currentThread()))

這個(gè)是一個(gè)CAS操作 是個(gè)樂觀鎖 對(duì)操作是原子的 保證是最新的

CAS底層使用JNI調(diào)用C代碼實(shí)現(xiàn)的莫矗,如果你有Hotspot源碼飒硅,那么在Unsafe.cpp里可以找到它的實(shí)現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市作谚,隨后出現(xiàn)的幾起案子三娩,更是在濱河造成了極大的恐慌,老刑警劉巖妹懒,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雀监,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡眨唬,警方通過查閱死者的電腦和手機(jī)会前,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾竿,“玉大人瓦宜,你說我怎么就攤上這事÷С龋” “怎么了歉提?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長区转。 經(jīng)常有香客問我苔巨,道長,這世上最難降的妖魔是什么废离? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任侄泽,我火速辦了婚禮,結(jié)果婚禮上蜻韭,老公的妹妹穿的比我還像新娘悼尾。我一直安慰自己柿扣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布闺魏。 她就那樣靜靜地躺著未状,像睡著了一般。 火紅的嫁衣襯著肌膚如雪析桥。 梳的紋絲不亂的頭發(fā)上逞怨,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天庶喜,我揣著相機(jī)與錄音涩哟,去河邊找鬼赡麦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娩怎,可吹牛的內(nèi)容都是我干的搔课。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼截亦,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爬泥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起魁巩,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤急灭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谷遂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葬馋,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肾扰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畴嘶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡集晚,死狀恐怖窗悯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偷拔,我是刑警寧澤蒋院,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站莲绰,受9級(jí)特大地震影響欺旧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛤签,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一辞友、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦称龙、人聲如沸留拾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痴柔。三九已至,卻和暖如春疫向,著一層夾襖步出監(jiān)牢的瞬間竞帽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工鸿捧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疙渣。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓匙奴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妄荔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泼菌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容