最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • 關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn)

    關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn),每個(gè)方法中都要單獨(dú)寫用戶登錄驗(yàn)證的方法,即使封裝成公共方法,也一樣要傳參調(diào)用和在方法中進(jìn)行判斷,需要的朋友可以參考下
    2023-05-05
  • SpringBoot內(nèi)容協(xié)商快速入門

    SpringBoot內(nèi)容協(xié)商快速入門

    本文主要介紹了SpringBoot內(nèi)容協(xié)商快速入門,使用ContentNegotiation來(lái)實(shí)現(xiàn)根據(jù)客戶端請(qǐng)求自動(dòng)切換返回格式的功能,感興趣的可以了解一下
    2025-05-05
  • 使用Java打造交互式Excel儀表板

    使用Java打造交互式Excel儀表板

    如果你經(jīng)常做數(shù)據(jù)分析報(bào)表,一定見(jiàn)過(guò)這種場(chǎng)景:一個(gè)Excel表格里塞滿了數(shù)據(jù),老板想看某個(gè)地區(qū)、某個(gè)月份的數(shù)據(jù),你得手動(dòng)篩選半天,切片器是Excel 2010引入的一個(gè)超實(shí)用功能,本質(zhì)上就是可視化的篩選器,今天我來(lái)分享一下如何用Java代碼給Excel添加切片器,需要的朋友可以參考下
    2026-05-05
  • Spring注解實(shí)現(xiàn)循環(huán)重試功能(適用場(chǎng)景分析)

    Spring注解實(shí)現(xiàn)循環(huán)重試功能(適用場(chǎng)景分析)

    這篇文章主要介紹了Spring注解實(shí)現(xiàn)循環(huán)重試功能,本篇主要簡(jiǎn)單介紹了Springboot中的Retryable的使用,主要的適用場(chǎng)景和注意事項(xiàng),當(dāng)需要重試的時(shí)候還是很有用的,需要的朋友可以參考下
    2023-04-04
  • java實(shí)現(xiàn)mp3合并的方法

    java實(shí)現(xiàn)mp3合并的方法

    這篇文章主要介紹了java實(shí)現(xiàn)mp3合并的方法,是Java操作多媒體文件的一個(gè)典型應(yīng)用,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • JAVA線程同步實(shí)例教程

    JAVA線程同步實(shí)例教程

    這篇文章主要介紹了JAVA線程同步實(shí)例教程,在Java程序設(shè)計(jì)中有著非常廣泛的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • 全面掌握J(rèn)ava中的循環(huán)控制語(yǔ)句與條件判斷語(yǔ)句的使用

    全面掌握J(rèn)ava中的循環(huán)控制語(yǔ)句與條件判斷語(yǔ)句的使用

    這篇文章主要介紹了Java中的循環(huán)控制語(yǔ)句與條件判斷語(yǔ)句的使用,循環(huán)和判斷是Java編程中流程控制的基礎(chǔ),需要的朋友可以參考下
    2016-02-02
  • 同時(shí)使用@LoadBalanced?@RefreshScope注解負(fù)載均衡失效分析

    同時(shí)使用@LoadBalanced?@RefreshScope注解負(fù)載均衡失效分析

    這篇文章主要為大家介紹了同時(shí)使用@LoadBalanced?@RefreshScope負(fù)載均衡失效問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java的幾種定時(shí)器的具體使用(4種)

    java的幾種定時(shí)器的具體使用(4種)

    本文主要介紹了4種類型的定時(shí)器:@Scheduled注解、quartz、new Timer().schedule、使用線程控制的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • SpringBoot項(xiàng)目的配置文件中設(shè)置server.port不生效問(wèn)題

    SpringBoot項(xiàng)目的配置文件中設(shè)置server.port不生效問(wèn)題

    這篇文章主要介紹了SpringBoot項(xiàng)目的配置文件中設(shè)置server.port不生效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論

舟曲县| 故城县| 庆云县| 石景山区| 青岛市| 江山市| 梧州市| 城固县| 衢州市| 清流县| 平和县| 巴彦县| 宜昌市| 文成县| 河间市| 库伦旗| 德州市| 原平市| 平凉市| 监利县| 汕尾市| 二连浩特市| 灵台县| 江达县| 同心县| 湘乡市| 长宁区| 巍山| 定兴县| 剑川县| 资阳市| 云浮市| 祥云县| 乾安县| 苏州市| 乌拉特前旗| 石河子市| 松桃| 金坛市| 鄯善县| 滦南县|