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

Java異步線程中的CompletableFuture與@Async詳解

 更新時間:2024年01月19日 09:12:44   作者:景慶197  
這篇文章主要介紹了Java異步線程中的CompletableFuture與@Async詳解,CompletableFuture是java中提供的一個異步執(zhí)行類,@Async是Spring提供的異步執(zhí)行方法,當調(diào)用方法單獨開啟一個線程進行調(diào)用,需要的朋友可以參考下

引言

1.CompletableFuture是java中提供的一個異步執(zhí)行類,@Async是Spring提供的異步執(zhí)行方法,當調(diào)用方法單獨開啟一個線程進行調(diào)用。

2.@Async通常指定一個方法使用的異步方法調(diào)用,而CompletableFuture可以一個方法體內(nèi)對請求體進行排序組合成鏈式調(diào)用再返回

1.@Async的使用

@Async的粒度比較大,在使用的時候只能添加到方法上,并且需要自定義線程池。

實現(xiàn):

需要在配置類上添加@Configuration

需要實現(xiàn)AsyncConfigure接口,里面有兩個方法可以重寫[getAsyncExecutor,getAsyncUncaughtExceptionHandler],主要實現(xiàn)的方法是getAsyncExecutor(),

我們當時實現(xiàn)手動注入一個@Bean。

ps:ThreadPoolTaskExecutor設(shè)計模式是:模板方法和策略模式

代碼實現(xiàn):

@Configuration
@EnableAsync
public class AsyncTaskConfig implements AsyncConfigurer {
    @Override
    @Bean
    public Executor getAsyncExecutor() {
        /**
         * ThreadPoolExecutor通用線程池
         * ThreadPoolTaskExecutor 是再ThradPoolExecutor上面做增強,支持業(yè)務執(zhí)行任務、支持定時任務、spring的線程管理等
         */
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(10);
        threadPoolTaskExecutor.setMaxPoolSize(100);
        threadPoolTaskExecutor.setQueueCapacity(10);
        // 設(shè)置線程池全部結(jié)束的時候才完全關(guān)閉線程
        threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        // 當線程關(guān)閉的時候需要等待多長時間才進行關(guān)閉
        threadPoolTaskExecutor.setAwaitTerminationSeconds(60);
        // 設(shè)置線程的名字
        threadPoolTaskExecutor.setThreadNamePrefix("Rabbit-Async-");
        // 進行初始化
        threadPoolTaskExecutor.initialize();
        return threadPoolTaskExecutor;
    }
// 需要實現(xiàn)AsynConfiguration的兩個方法
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

2.CompletableFuture總體架構(gòu)

Future 它是java5添加的接口,用來描述一個異步計算的結(jié)果,可以用isDone方法來計算是否完成,或者使用get阻塞往效用線程,直到計算返回結(jié)果,可以使用Cancel方法停止任務執(zhí)行。

CompletableFuture實現(xiàn)Furure接口,不推薦使用get方式阻塞或者輪詢方式獲取結(jié)果。

CompletableFuture.supplyAsync(Runnable,Executor);//支持返回值

CompletableFutre.runAsync(Runnable,Executor);//不支持返回值

3.計算完成時回調(diào)方法

whenComplete(BigConsumer):同步完成正常處理結(jié)果

whenCompleteAsync(BigConsumer):異步完成處理結(jié)果

whenCompleteAysnc(BigConsumer,Executor):異步完成處理結(jié)果

exceptionally(Function):處理異常結(jié)果

串行化與并行化

串行化:程序從上到下執(zhí)行的都是一個循序

并行化:從上到下執(zhí)行順序不一定

串行化案例

thenApply方法(有返回值):當一個線程依賴另一個線程是,獲取上一個任務返回結(jié)果,并返回當前任務的返回值

thenAccept方法(無返回值):接受任務的處理結(jié)果,并消費處理,無返回值結(jié)果。

thenRun方法(最后執(zhí)行):只有上面的任務執(zhí)行完成,就開始執(zhí)行thenRun,只是處理完任務后執(zhí)行thenRun的后續(xù)操作。

 并行化案例:

多任務組合

allof().join();:等待所有任務完成之后返回

anyof():只有一個任務完成

到此這篇關(guān)于Java異步線程中的CompletableFuture與@Async詳解的文章就介紹到這了,更多相關(guān)CompletableFuture與@Async內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個性修改SpringBoot項目的啟動banner的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • java集合 ArrayDeque源碼詳細分析

    java集合 ArrayDeque源碼詳細分析

    ArrayDeque是一種以數(shù)組方式實現(xiàn)的雙端隊列,它是非線程安全的。下面小編和大家一起學習一下
    2019-05-05
  • Spring Cloud Gateway組件的三種使用方式實例詳解

    Spring Cloud Gateway組件的三種使用方式實例詳解

    Spring Cloud Gateway是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān)旨在為微服務框架提供一種簡單而有效的統(tǒng)一的API 路由管理方式,統(tǒng)一訪問接口,這篇文章主要介紹了Spring Cloud Gateway組件的三種使用方式,需要的朋友可以參考下
    2024-01-01
  • 解決Spring?MVC中文亂碼的編碼配置

    解決Spring?MVC中文亂碼的編碼配置

    這篇文章主要為大家介紹了解決SpringMVC中文亂碼的編碼配置示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 詳解Jvm中時區(qū)設(shè)置方式

    詳解Jvm中時區(qū)設(shè)置方式

    這篇文章主要介紹了詳解Jvm中時區(qū)設(shè)置方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java枚舉類型深度詳解

    Java枚舉類型深度詳解

    Java的枚舉類型(enum)是一種強大的工具,它不僅可以讓你的代碼更簡潔、可讀,而且通過類型安全、常量集合、方法重寫和接口實現(xiàn)等特性,使得枚舉在很多場景下都非常有用,本文給大家介紹Java枚舉類型詳解,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • SpringBoot 3.5 集成 Knife4j 4.3的詳細步驟

    SpringBoot 3.5 集成 Knife4j 4.3的詳細步驟

    這篇文章給大家介紹SpringBoot3.5集成Knife4j 4.3步驟,本文分步驟結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-04-04
  • Java異常簡介和架構(gòu)_動力節(jié)點Java學院整理

    Java異常簡介和架構(gòu)_動力節(jié)點Java學院整理

    這篇文章主要分享了Java異常簡介和架構(gòu),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java實戰(zhàn)小技巧之字符串與容器互轉(zhuǎn)詳解

    java實戰(zhàn)小技巧之字符串與容器互轉(zhuǎn)詳解

    Java.lang.String是Java的字符串類. Srting是一個不可變對象,下面這篇文章主要給大家介紹了關(guān)于java實戰(zhàn)小技巧之字符串與容器互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Spring整合JPA與Hibernate流程詳解

    Spring整合JPA與Hibernate流程詳解

    這篇文章主要介紹了Spring整合Hibernate與JPA,在正式進入Hibernate的高級應用之前,需要了解聲明是數(shù)據(jù)模型與領(lǐng)域模型,這兩個概念將會幫助我們更好的理解實體對象的關(guān)聯(lián)關(guān)系映射
    2023-01-01

最新評論

和林格尔县| 乌兰县| 通道| 星子县| 卢氏县| 高尔夫| 九寨沟县| 若羌县| 蓬溪县| 泰顺县| 天等县| 关岭| 高唐县| 凤庆县| 福海县| 合作市| 林州市| 静宁县| 交口县| 沂水县| 柏乡县| 泰兴市| 开封县| 永春县| 垦利县| 呼玛县| 宁国市| 泉州市| 博野县| 客服| 景泰县| 休宁县| 铜山县| 聂荣县| 偃师市| 潞城市| 云南省| 沾化县| 汪清县| 丰城市| 麻阳|