成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java Callable與Future模式

Mr_zhang / 1544人閱讀

摘要:然而,這兩種方式的缺點(diǎn)是在線程任務(wù)執(zhí)行結(jié)束后,無(wú)法獲取執(zhí)行結(jié)果。如果任務(wù)執(zhí)行結(jié)束,無(wú)論是正常結(jié)束或是中途取消還是發(fā)生異常,都返回。如果任務(wù)完成前被取消,則返回。參數(shù)表示是否中斷執(zhí)行中的線程。

在Java中,創(chuàng)建線程一般有兩種方式,一種是繼承Thread類(lèi),一種是實(shí)現(xiàn)Runnable接口。然而,這兩種方式的缺點(diǎn)是在線程任務(wù)執(zhí)行結(jié)束后,無(wú)法獲取執(zhí)行結(jié)果。我們一般只能采用共享變量或共享存儲(chǔ)區(qū)以及線程通信的方式實(shí)現(xiàn)獲得任務(wù)結(jié)果的目的。不過(guò),Java中,也提供了使用Callable和Future來(lái)實(shí)現(xiàn)獲取任務(wù)結(jié)果的操作。Callable用來(lái)執(zhí)行任務(wù),產(chǎn)生結(jié)果,而Future用來(lái)獲得結(jié)果。

Future常用方法:
V get() :獲取異步執(zhí)行的結(jié)果,如果沒(méi)有結(jié)果可用,此方法會(huì)阻塞直到異步計(jì)算完成。
V get(Long timeout , TimeUnit unit) :獲取異步執(zhí)行結(jié)果,如果沒(méi)有結(jié)果可用,此方法會(huì)阻塞,但是會(huì)有時(shí)間限制,如果阻塞時(shí)間超過(guò)設(shè)定的timeout時(shí)間,該方法將拋出異常。
boolean isDone() :如果任務(wù)執(zhí)行結(jié)束,無(wú)論是正常結(jié)束或是中途取消還是發(fā)生異常,都返回true。
boolean isCanceller() :如果任務(wù)完成前被取消,則返回true。
boolean cancel(boolean mayInterruptRunning) :如果任務(wù)還沒(méi)開(kāi)始,執(zhí)行cancel(...)方法將返回false;如果任務(wù)已經(jīng)啟動(dòng),執(zhí)行cancel(true)方法將以中斷執(zhí)行此任務(wù)線程的方式來(lái)試圖停止任務(wù),如果停止成功,返回true;當(dāng)任務(wù)已經(jīng)啟動(dòng),執(zhí)行cancel(false)方法將不會(huì)對(duì)正在執(zhí)行的任務(wù)線程產(chǎn)生影響(讓線程正常執(zhí)行到完成),此時(shí)返回false;當(dāng)任務(wù)已經(jīng)完成,執(zhí)行cancel(...)方法將返回false。mayInterruptRunning參數(shù)表示是否中斷執(zhí)行中的線程。
通過(guò)方法分析我們也知道實(shí)際上Future提供了3種功能:(1)能夠中斷執(zhí)行中的任務(wù)(2)判斷任務(wù)是否執(zhí)行完成(3)獲取任務(wù)執(zhí)行完成后額結(jié)果。

定義thread

public class CallThread implements Callable {

    @Override
    public String call() throws InterruptedException {
        Thread.sleep(1000);
        return "callable and future";
    }
}

測(cè)試

@RequestMapping("test-call")
    public void testCall() {
        CallThread callThread = new CallThread();
        ExecutorService executor = Executors.newCachedThreadPool();
        Future submit = executor.submit(callThread);
        try {
            String s = submit.get();
            System.out.println("獲取結(jié)果:" + s);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74740.html

相關(guān)文章

  • Java多線程進(jìn)階(四二)—— J.U.C之executors框架:Future模式

    摘要:本文首發(fā)于一世流云的專欄一模式簡(jiǎn)介模式是多線程設(shè)計(jì)模式中的一種常見(jiàn)模式,它的主要作用就是異步地執(zhí)行任務(wù),并在需要的時(shí)候獲取結(jié)果。二中的模式在多線程基礎(chǔ)之模式中,我們?cè)?jīng)給出過(guò)模式的通用類(lèi)關(guān)系圖。 showImg(https://segmentfault.com/img/bVbiwcx?w=1000&h=667); 本文首發(fā)于一世流云的專欄:https://segmentfault.co...

    marek 評(píng)論0 收藏0
  • Think In Java 讀書(shū)筆記:Concurrency

    摘要:類(lèi)是一種有效的廣泛使用的以工作隊(duì)列為基礎(chǔ)的的線程池的正確實(shí)現(xiàn),無(wú)須嘗試編寫(xiě)自己的線程池這樣容易出錯(cuò)。是并發(fā)編程庫(kù)新添加的類(lèi)它提供的方法可以返回各線程的返回值與接口類(lèi)似于但是無(wú)法返回結(jié)果也無(wú)法返回異常。返回的結(jié)果可以被拿到。 package com.snda.sync.impl.test; import java.util.ArrayList; import java.util.con...

    DevTTL 評(píng)論0 收藏0
  • Java 8 并發(fā)教程:線程和執(zhí)行器

    摘要:在這個(gè)示例中我們使用了一個(gè)單線程線程池的。在延遲消逝后,任務(wù)將會(huì)并發(fā)執(zhí)行。這是并發(fā)系列教程的第一部分。第一部分線程和執(zhí)行器第二部分同步和鎖第三部分原子操作和 Java 8 并發(fā)教程:線程和執(zhí)行器 原文:Java 8 Concurrency Tutorial: Threads and Executors 譯者:BlankKelly 來(lái)源:Java8并發(fā)教程:Threads和Execut...

    jsdt 評(píng)論0 收藏0
  • Java并發(fā)】Runnable、Callable、Future、FutureTask

    摘要:聲明了幾種方法,其中有一個(gè)就是傳入聲明了對(duì)具體的或者任務(wù)執(zhí)行進(jìn)行取消查詢結(jié)果獲取等方法。事實(shí)上,是接口的一個(gè)唯一實(shí)現(xiàn)類(lèi)。使用示例第一種方式是使用繼承了的線程池中的方法,將直接提交創(chuàng)建。 創(chuàng)建線程的兩種方式 直接繼承 Thread 實(shí)現(xiàn) Runnable 接口 這兩種方式都有一個(gè)缺點(diǎn):在執(zhí)行完成任務(wù)之后,無(wú)法直接獲取到最后的執(zhí)行結(jié)果。如果需要獲取執(zhí)行結(jié)果,就必須通過(guò)共享變量或線程通...

    zhaot 評(píng)論0 收藏0
  • Java多線程-CallableFuture

    摘要:類(lèi)提供了一些有用的方法在線程池中執(zhí)行內(nèi)的任務(wù)。在線程池提交任務(wù)后返回了一個(gè)對(duì)象,使用它可以知道任務(wù)的狀態(tài)和得到返回的執(zhí)行結(jié)果。 Callable和Future出現(xiàn)的原因 創(chuàng)建線程的2種方式,一種是直接繼承Thread,另外一種就是實(shí)現(xiàn)Runnable接口。 這2種方式都有一個(gè)缺陷就是:在執(zhí)行完任務(wù)之后無(wú)法獲取執(zhí)行結(jié)果。 如果需要獲取執(zhí)行結(jié)果,就必須通過(guò)共享變量或者使用線程通信的方式來(lái)達(dá)...

    seasonley 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<