0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Callable接口介紹 Runnable和Callable的區(qū)別

454398 ? 來(lái)源:chinaunix ? 作者:zmy愛(ài)吃炸雞 ? 2020-10-16 11:30 ? 次閱讀

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 線程池
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    6811
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    501

    瀏覽量

    19580
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C++可調(diào)用Callable類型的總結(jié)

    自從在使用 std::thread 構(gòu)造函數(shù)過(guò)程中遇到了 Callable 類型的概念以來(lái)用到了很多關(guān)于它的使用。
    發(fā)表于 07-17 14:04 ?344次閱讀

    【資料分享】SDIO接口介紹( 有SD和SDIO區(qū)別)

    SDIO接口介紹( 有SD和SDIO區(qū)別)
    發(fā)表于 03-12 11:20

    可調(diào)用的VEE服務(wù)器,Matlab無(wú)法識(shí)別

    來(lái)回傳遞數(shù)據(jù)。我已經(jīng)使用文件讀/寫(xiě)來(lái)傳遞參數(shù)。我認(rèn)為問(wèn)題在于Matlab而不是Callable VEE,因?yàn)閂BScript / VBAThanks的建議很好-----原始消息-----來(lái)自
    發(fā)表于 09-06 13:33

    python用pyserial讀取串口錯(cuò)誤類型及解決辦法

    is not callable沒(méi)有返回值正確代碼:ser = serial.Serial('COM7', 115200, 8, 'N', 1)flag = ser.is_open原因:調(diào)用屬性is_open時(shí)將其視為函數(shù),寫(xiě)成 ser.is_open()。關(guān)于is_open的功能及用法,可參見(jiàn)python庫(kù)
    發(fā)表于 01-13 07:12

    TMS320C54x DSP Library(庫(kù))

    DSP platform. This source-code library includes C-callable functions (ANSI-C language compatible) for general signal processing math and vec
    發(fā)表于 09-06 00:02 ?26次下載

    多線程并發(fā)處理方式

    1. 捕獲InterruptedException錯(cuò)誤 請(qǐng)檢查下面的代碼片段: public class Task implements Runnable { private final
    發(fā)表于 09-28 15:02 ?0次下載

    各種標(biāo)準(zhǔn)接口介紹區(qū)別

    本文將重點(diǎn)介紹各種標(biāo)準(zhǔn)接口,并揭示它們對(duì)不同嵌入式芯片廠商的區(qū)別所在。了解基本接口可幫助設(shè)計(jì)人員優(yōu)先考慮哪些接口應(yīng)為片上。另外,雖然標(biāo)準(zhǔn)
    發(fā)表于 06-04 03:38 ?2w次閱讀
    各種標(biāo)準(zhǔn)<b class='flag-5'>接口</b><b class='flag-5'>介紹</b>和<b class='flag-5'>區(qū)別</b>

    USB接口、串口、并口有何區(qū)別

    本文開(kāi)始介紹了USB接口的工作原理和優(yōu)點(diǎn),其次詳細(xì)的介紹了串口劃分標(biāo)準(zhǔn)和并口的區(qū)別以及并口的主要特點(diǎn)與分類,最后闡述了USB接口、串口和并口
    發(fā)表于 03-26 14:58 ?9.6w次閱讀

    TMS320,c28xDSP中創(chuàng)建可c-callable程序集函數(shù)的簡(jiǎn)單方法

    c-callable程序集需要理解參數(shù)傳遞的約定和環(huán)境,這是c編譯器期望的。此應(yīng)用程序報(bào)告提供了配置c編譯器以幫助解決這些問(wèn)題的說(shuō)明和建議。
    發(fā)表于 04-11 11:06 ?3次下載
    TMS320,c28xDSP中創(chuàng)建可c-<b class='flag-5'>callable</b>程序集函數(shù)的簡(jiǎn)單方法

    一文解讀DP和HDMI的接口定義及區(qū)別分析

    本文首先介紹了DP接口的概念與優(yōu)勢(shì),其次介紹了HDMI優(yōu)勢(shì)與選購(gòu)技巧,最后闡述了DP接口和HDMI的區(qū)別以及分析了HDMI和DP
    發(fā)表于 04-23 09:19 ?9w次閱讀

    端口和接口有什么區(qū)別和聯(lián)系嗎

    本文首先介紹了端口的概念、分類及作用,其次介紹接口的概念與顯示器接口的類型,最后介紹了端口和接口
    發(fā)表于 04-23 16:54 ?6.1w次閱讀
    端口和<b class='flag-5'>接口</b>有什么<b class='flag-5'>區(qū)別</b>和聯(lián)系嗎

    像學(xué)習(xí)編程一樣學(xué)習(xí)深度學(xué)習(xí)模型開(kāi)發(fā)

    前面介紹的各種基本層,除了可以add進(jìn)Sequential容器串聯(lián)之外,它們本身也是callable對(duì)象,被調(diào)用之后,返回的還是callable對(duì)象。所以可以將它們視為函數(shù),通過(guò)調(diào)用的方式來(lái)進(jìn)行串聯(lián)。
    的頭像 發(fā)表于 06-06 09:19 ?2722次閱讀

    DeferredResult異步請(qǐng)求處理 提高系統(tǒng)吞吐量的一把利器

    基礎(chǔ)準(zhǔn)備 ResponseMsg TaskService 阻塞調(diào)用 Callable異步調(diào)用 DeferredResult異步調(diào)用 后記 大家都知道,Callable和DeferredResult
    的頭像 發(fā)表于 10-10 16:55 ?1099次閱讀

    C++ invoke與function的區(qū)別在哪?

    invoke是C++17標(biāo)準(zhǔn)引入的一個(gè)函數(shù)模板,用來(lái)調(diào)用可調(diào)用對(duì)象(Callable Object,如函數(shù)指針、函數(shù)對(duì)象、成員函數(shù)指針等)并返回結(jié)果。
    的頭像 發(fā)表于 09-04 09:11 ?732次閱讀
    C++ invoke與function的<b class='flag-5'>區(qū)別</b>在哪?

    java實(shí)現(xiàn)多線程的幾種方式

    了多種實(shí)現(xiàn)多線程的方式,本文將詳細(xì)介紹以下幾種方式: 1.繼承Thread類 2.實(shí)現(xiàn)Runnable接口 3.Callable和Future 4.線程池 5.Java 8中
    的頭像 發(fā)表于 03-14 16:55 ?437次閱讀