Callable接口:
Callable,新啟線程的一種方式,返回結(jié)果并且可能拋出異常的任務(wù),在前面的新啟線程的文章中用過(guò),但是沒(méi)有具體講解
優(yōu)點(diǎn):
可以獲取線程的執(zhí)行結(jié)果,也稱為返回值
通過(guò)與Future的結(jié)合,可以實(shí)現(xiàn)利用Future來(lái)跟蹤異步計(jì)算的結(jié)果
Runnable和Callable的區(qū)別:
Callable規(guī)定的方法是call(),Runnable規(guī)定的接口是run();
Callable的任務(wù)執(zhí)行后可返回值,而Runnable的任務(wù)是不能有返回值的;
call方法可以拋出異常,run方法不可以
運(yùn)行Callable任務(wù)可以拿到一個(gè)Future對(duì)象,表示異步計(jì)算的結(jié)果,它提供了檢查是否計(jì)算完成的方法,以等待計(jì)算的完成,并檢索計(jì)算的結(jié)果,通過(guò)Future對(duì)象可以了解任務(wù)執(zhí)行情況,可以取消任務(wù)的執(zhí)行,還可以獲取執(zhí)行結(jié)果
Future接口:
Future是一個(gè)接口,代表了一個(gè)異步計(jì)算的結(jié)果,接口中的方法用來(lái)檢查計(jì)算是否完成,等待完成和得到計(jì)算結(jié)果;
當(dāng)計(jì)算完成后,只能通過(guò)get()方法得到結(jié)果,get()方法會(huì)阻塞,一直到線程的計(jì)算結(jié)果完成并返回;
如果想取消,那么調(diào)用cancel()方法,其他方法用于確定任務(wù)是正常完成還是取消了;
一旦計(jì)算完成了,那么這個(gè)計(jì)算就不能被取消
FutureTask類:
FutureTask類實(shí)現(xiàn)了RunnableFuture接口,而RunnableFuture接口是繼承了Runnable和Future接口,所以說(shuō)FutureTask是一個(gè)提供異步計(jì)算結(jié)果的任務(wù);
FutureTask可以用來(lái)包裝Callable或者Runnable接口的實(shí)現(xiàn)對(duì)象,因?yàn)镕utureTask實(shí)現(xiàn)了Runnable接口,所以FutureTask也可以提交給線程池
Callable,Future,FutureTask三者之間的關(guān)系:
Callable的兩種執(zhí)行方式:
1:借助FutureTask,包裝Callable接口的實(shí)現(xiàn)類,然后傳遞給Thread線程執(zhí)行
2:借助線程池來(lái)執(zhí)行
線程池這個(gè)只粘貼關(guān)鍵代碼,線程池的知識(shí)就不在這多說(shuō)了,之后會(huì)具體講解
返回的Future接口的使用和FutureTask是一樣的
這個(gè)接口實(shí)現(xiàn)的線程,是有返回值的
可以說(shuō)一下我之前用到的場(chǎng)景
是這樣的,我之前用到的一般是用于云上,或者存儲(chǔ)服務(wù)器下載電子文件,就是本身我一個(gè)接口就是需要查詢數(shù)據(jù)庫(kù)并,進(jìn)行結(jié)果的大量計(jì)算和結(jié)果轉(zhuǎn)換的,同時(shí)還要上云上下載比較大的電子文件,所以我采用Callable配合線程池來(lái)完成云上文件的下載;
編輯:hfy
-
線程池
+關(guān)注
關(guān)注
0文章
57瀏覽量
7054 -
線程
+關(guān)注
關(guān)注
0文章
507瀏覽量
20041
發(fā)布評(píng)論請(qǐng)先 登錄
C++可調(diào)用Callable類型的總結(jié)
可調(diào)用的VEE服務(wù)器,Matlab無(wú)法識(shí)別
python用pyserial讀取串口錯(cuò)誤類型及解決辦法
TMS320C54x DSP Library(庫(kù))
多線程并發(fā)處理方式
各種標(biāo)準(zhǔn)接口介紹和區(qū)別

USB接口、串口、并口有何區(qū)別
TMS320,c28xDSP中創(chuàng)建可c-callable程序集函數(shù)的簡(jiǎn)單方法
一文解讀DP和HDMI的接口定義及區(qū)別分析
端口和接口有什么區(qū)別和聯(lián)系嗎

像學(xué)習(xí)編程一樣學(xué)習(xí)深度學(xué)習(xí)模型開(kāi)發(fā)
DeferredResult異步請(qǐng)求處理 提高系統(tǒng)吞吐量的一把利器
C++ invoke與function的區(qū)別在哪?

評(píng)論