亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的FutureTask實(shí)現(xiàn)異步任務(wù)代碼實(shí)例

 更新時(shí)間:2024年01月15日 09:41:57   作者:Mu_Mu是一只小白  
這篇文章主要介紹了Java中的FutureTask實(shí)現(xiàn)異步任務(wù)代碼實(shí)例,普通的線程執(zhí)行是無(wú)法獲取到執(zhí)行結(jié)果的,FutureTask?間接實(shí)現(xiàn)了?Runnable?和?Future?接口,可以得到子線程耗時(shí)操作的執(zhí)行結(jié)果,AsyncTask?異步任務(wù)就是使用了該機(jī)制,需要的朋友可以參考下

FutureTask實(shí)現(xiàn)異步任務(wù)

FutureTask 的執(zhí)行結(jié)果和出現(xiàn)異常的異常對(duì)象都會(huì)被放到outcome對(duì)象中,通過(guò)get()方法返回。

1.測(cè)試future任務(wù)正常返回

public class T2 {
    ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNamePrefix("thread-start-runner").build();
    ExecutorService taskExe = new ThreadPoolExecutor(10, 20, 800L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(100), namedThreadFactory);
    private static final Logger LOG = LoggerFactory.getLogger(T2.class);
    @Test
    public void test2() {
        List<FutureTask<Integer>> taskList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            final int a = i;
            FutureTask<Integer> futureTask = new FutureTask<>(() -> {
                LOG.info("正在進(jìn)行第" + a + "個(gè)任務(wù)");
                Thread.sleep(3000);
                return 1;
            });
            taskList.add(futureTask);
            //異步執(zhí)行
            taskExe.submit(futureTask);
        }
        LOG.info("任務(wù)添加完成");
        int count = 0;
        try {
            for (FutureTask<Integer> task : taskList) {
                /*
                FutureTask執(zhí)行的結(jié)果會(huì)放入它的私有變量outcome中,其他線程直接調(diào)用futureTask.get()去讀取該變量即可
                會(huì)阻塞直到單個(gè)任務(wù)執(zhí)行完畢
                * */
                Integer value = task.get();
                LOG.info("value:" + value);
                count += value;
            }
        } catch (InterruptedException e) {
            LOG.error("線程執(zhí)行被中斷", e);
        } catch (ExecutionException e) {
            LOG.error("線程執(zhí)行出現(xiàn)異常", e);
        }
        taskExe.shutdown();
        LOG.info("count:" + count);
    }```

執(zhí)行結(jié)果:正常累加。

在這里插入圖片描述

2.測(cè)試future任務(wù)異常返回,通過(guò)get()方法拿到異常

@Test
    public void test3() {
        List<FutureTask<Integer>> taskList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            final int a = i;
            FutureTask<Integer> futureTask = new FutureTask<>(() -> {
                LOG.info("正在進(jìn)行第" + a + "個(gè)任務(wù)");
                int v=1/0;
                return 1;
            });
            taskList.add(futureTask);
            //異步執(zhí)行
            taskExe.submit(futureTask);
        }
        LOG.info("任務(wù)添加完成");
        int count = 0;
        try {
            for (FutureTask<Integer> task : taskList) {
                /*
                FutureTask執(zhí)行的結(jié)果會(huì)放入它的私有變量outcome中(包括異常),其他線程直接調(diào)用futureTask.get()去讀取該變量即可
                會(huì)阻塞直到單個(gè)任務(wù)執(zhí)行完畢
                * */
                Integer value = task.get();
                LOG.info("value:" + value);
                count += value;
            }
        } catch (InterruptedException e) {
            LOG.error("線程執(zhí)行被中斷", e);
        } catch (ExecutionException e) {
            LOG.error("線程執(zhí)行出現(xiàn)異常", e);
        }
        taskExe.shutdown();
        LOG.info("count:" + count);
}

執(zhí)行結(jié)果:捕獲到異常。

在這里插入圖片描述

3.callable出現(xiàn)異常,不進(jìn)行g(shù)et()

   @Test
    public void test4() {
        List<FutureTask<Integer>> taskList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            final int a = i;
            FutureTask<Integer> futureTask = new FutureTask<>(() -> {
                LOG.info("正在進(jìn)行第" + a + "個(gè)任務(wù)");
                int v = 1 / 0;
                return 1;
            });
            taskList.add(futureTask);
            //異步執(zhí)行
            taskExe.submit(futureTask);
        }
        LOG.info("任務(wù)添加完成");
        taskExe.shutdown();
    }

執(zhí)行結(jié)果:沒(méi)有拋出異常。

在這里插入圖片描述

到此這篇關(guān)于Java中的FutureTask實(shí)現(xiàn)異步任務(wù)代碼實(shí)例的文章就介紹到這了,更多相關(guān)FutureTask實(shí)現(xiàn)異步任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Junit寫法及與spring整合過(guò)程詳解

    Junit寫法及與spring整合過(guò)程詳解

    這篇文章主要介紹了Junit寫法及與spring整合過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java實(shí)現(xiàn)網(wǎng)站微信掃碼支付

    java實(shí)現(xiàn)網(wǎng)站微信掃碼支付

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)網(wǎng)站微信掃碼支付,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用Java代碼進(jìn)行因數(shù)分解和求最小公倍數(shù)的示例

    使用Java代碼進(jìn)行因數(shù)分解和求最小公倍數(shù)的示例

    這篇文章主要介紹了使用Java代碼進(jìn)行因數(shù)分解和求最小公倍數(shù)的示例,都是基于最基礎(chǔ)的算法原理實(shí)現(xiàn),需要的朋友可以參考下
    2015-11-11
  • SpringBoot集成Kaptcha驗(yàn)證碼的詳細(xì)過(guò)程

    SpringBoot集成Kaptcha驗(yàn)證碼的詳細(xì)過(guò)程

    Kaptcha是一個(gè)強(qiáng)大而靈活的Java驗(yàn)證碼生成庫(kù),通過(guò)合理的配置和使用,它可以有效地提高web應(yīng)用的安全性,防止自動(dòng)化程序的濫用,這篇文章主要介紹了SpringBoot集成Kaptcha驗(yàn)證碼,需要的朋友可以參考下
    2024-07-07
  • SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作

    SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作

    這篇文章主要介紹了SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java原生操作JDBC連接以及原理詳解

    Java原生操作JDBC連接以及原理詳解

    這篇文章主要給大家介紹了關(guān)于Java原生操作JDBC連接以及原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java?synchronized底層實(shí)現(xiàn)原理以及鎖優(yōu)化

    Java?synchronized底層實(shí)現(xiàn)原理以及鎖優(yōu)化

    Synchronized是Java中解決并發(fā)問(wèn)題的一種最常用的方法,也是最簡(jiǎn)單的一種方法,下面這篇文章主要給大家介紹了關(guān)于Java?synchronized底層實(shí)現(xiàn)原理以及鎖優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • maven多模塊pom配置實(shí)例詳解

    maven多模塊pom配置實(shí)例詳解

    這篇文章主要介紹了maven多模塊pom配置實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java 代碼檢查工具之PMD入門使用詳細(xì)教程

    Java 代碼檢查工具之PMD入門使用詳細(xì)教程

    這篇文章主要介紹了Java 代碼檢查工具之PMD入門使用詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • java?百度手寫文字識(shí)別接口配置代碼

    java?百度手寫文字識(shí)別接口配置代碼

    本文通過(guò)實(shí)例代碼給大家介紹了java?百度手寫文字識(shí)別接口配置方法,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-01-01

最新評(píng)論