Callable接口:
Callable,新啟線程的一種方式,返回結(jié)果并且可能拋出異常的任務(wù),在前面的新啟線程的文章中用過,但是沒有具體講解
優(yōu)點(diǎn):
可以獲取線程的執(zhí)行結(jié)果,也稱為返回值
通過與Future的結(jié)合,可以實(shí)現(xiàn)利用Future來跟蹤異步計(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é)果,通過Future對(duì)象可以了解任務(wù)執(zhí)行情況,可以取消任務(wù)的執(zhí)行,還可以獲取執(zhí)行結(jié)果
Future接口:
Future是一個(gè)接口,代表了一個(gè)異步計(jì)算的結(jié)果,接口中的方法用來檢查計(jì)算是否完成,等待完成和得到計(jì)算結(jié)果;
當(dāng)計(jì)算完成后,只能通過get()方法得到結(jié)果,get()方法會(huì)阻塞,一直到線程的計(jì)算結(jié)果完成并返回;
如果想取消,那么調(diào)用cancel()方法,其他方法用于確定任務(wù)是正常完成還是取消了;
一旦計(jì)算完成了,那么這個(gè)計(jì)算就不能被取消
FutureTask類:
FutureTask類實(shí)現(xiàn)了RunnableFuture接口,而RunnableFuture接口是繼承了Runnable和Future接口,所以說FutureTask是一個(gè)提供異步計(jì)算結(jié)果的任務(wù);
FutureTask可以用來包裝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:借助線程池來執(zhí)行
線程池這個(gè)只粘貼關(guān)鍵代碼,線程池的知識(shí)就不在這多說了,之后會(huì)具體講解
返回的Future接口的使用和FutureTask是一樣的
這個(gè)接口實(shí)現(xiàn)的線程,是有返回值的
可以說一下我之前用到的場(chǎng)景
是這樣的,我之前用到的一般是用于云上,或者存儲(chǔ)服務(wù)器下載電子文件,就是本身我一個(gè)接口就是需要查詢數(shù)據(jù)庫(kù)并,進(jìn)行結(jié)果的大量計(jì)算和結(jié)果轉(zhuǎn)換的,同時(shí)還要上云上下載比較大的電子文件,所以我采用Callable配合線程池來完成云上文件的下載;
編輯:hfy
-
線程池
+關(guān)注
關(guān)注
0文章
57瀏覽量
6877 -
線程
+關(guān)注
關(guān)注
0文章
505瀏覽量
19732
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論