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

三種SpringBoot中實(shí)現(xiàn)異步調(diào)用的方法總結(jié)

 更新時(shí)間:2023年05月31日 08:52:21   作者:Java技術(shù)指北  
Spring Boot 提供了多種方式來實(shí)現(xiàn)異步任務(wù),這篇文章主要為大家介紹了常用的三種實(shí)現(xiàn)方式,文中的示例代碼講解詳細(xì),需要的可以參考一下

1、基于注解 @Async

@Async 注解是 Spring 提供的一種輕量級(jí)異步方法實(shí)現(xiàn)方式,它可以標(biāo)記在方法上,用來告訴 Spring 這個(gè)方法是一個(gè)異步方法,Spring 會(huì)將這個(gè)方法的執(zhí)行放在異步線程中進(jìn)行。使用 @Async 注解需要滿足以下條件:

  • 需要在 Spring Boot 主類上添加 @EnableAsync 注解啟用異步功能;
  • 需要在異步方法上添加 @Async 注解。

示例代碼如下:

@SpringBootApplication
@EnableAsync
public?class?Application?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(Application.class,?args);
????}
}

@Service
public?class?AsyncService?{
????@Async
????public?void?asyncTask()?{
????????//?異步任務(wù)執(zhí)行的邏輯
????}
}

2、使用 CompletableFuture 實(shí)現(xiàn)異步任務(wù)

CompletableFuture 是 Java 8 新增的一個(gè)異步編程工具,它可以方便地實(shí)現(xiàn)異步任務(wù)。使用 CompletableFuture 需要滿足以下條件:

  • 異步任務(wù)的返回值類型必須是 CompletableFuture 類型;
  • 在異步任務(wù)中使用 CompletableFuture.supplyAsync() 或 CompletableFuture.runAsync() 方法來創(chuàng)建異步任務(wù);
  • 在主線程中使用 CompletableFuture.get() 方法獲取異步任務(wù)的返回結(jié)果。

示例代碼如下:

@Service
public?class?AsyncService?{
????public?CompletableFuture<String>?asyncTask()?{
????????return?CompletableFuture.supplyAsync(()?->?{
????????????//?異步任務(wù)執(zhí)行的邏輯
????????????return?"異步任務(wù)執(zhí)行完成";
????????});
????}
}

3、使用 TaskExecutor 實(shí)現(xiàn)異步任務(wù)

TaskExecutor 是 Spring 提供的一個(gè)接口,它定義了一個(gè)方法 execute(),用來執(zhí)行異步任務(wù)。使用 TaskExecutor 需要滿足以下條件:

  • 需要在 Spring 配置文件中配置一個(gè) TaskExecutor 實(shí)例;
  • 在異步方法中調(diào)用 TaskExecutor 實(shí)例的 execute() 方法來執(zhí)行異步任務(wù)。

示例代碼如下:

@Configuration
@EnableAsync
public?class?AsyncConfig?implements?AsyncConfigurer?{
????@Bean(name?=?"asyncExecutor")
????public?TaskExecutor?asyncExecutor()?{
????????ThreadPoolTaskExecutor?executor?=?new?ThreadPoolTaskExecutor();
????????executor.setCorePoolSize(10);
????????executor.setMaxPoolSize(20);
????????executor.setQueueCapacity(100);
????????executor.setThreadNamePrefix("async-");
????????executor.initialize();
????????return?executor;
????}

????@Override
????public?Executor?getAsyncExecutor()?{
????????return?asyncExecutor();
????}

????@Override
????public?AsyncUncaughtExceptionHandler?getAsyncUncaughtExceptionHandler()?{
????????return?new?SimpleAsyncUncaughtExceptionHandler();
????}
}

@Service
public?class?AsyncService?{
????@Autowired
????@Qualifier("asyncExecutor")
????private?TaskExecutor?taskExecutor;

????public?void?asyncTask()?{
????????taskExecutor.execute(()?->?{
????????????//?異步任務(wù)執(zhí)行的邏輯
????????});
????}
}

4、優(yōu)缺點(diǎn)總結(jié)

這三種實(shí)現(xiàn)異步任務(wù)的方法各有優(yōu)缺點(diǎn),具體如下:

1.基于注解的方式

優(yōu)點(diǎn):

  • 簡單易用,只需要在方法上添加@Async注解即可。
  • 依賴Spring框架,集成度高,可以與其他Spring組件無縫協(xié)作。

缺點(diǎn):

  • 方法必須是public,否則異步執(zhí)行無效。
  • 不能直接獲取異步執(zhí)行結(jié)果,需要使用Future或CompletableFuture等類型。

2.實(shí)現(xiàn)AsyncConfigurer接口的方式

優(yōu)點(diǎn):

  • 更加靈活,可以配置線程池等異步執(zhí)行的相關(guān)參數(shù)。
  • 可以通過實(shí)現(xiàn)AsyncUncaughtExceptionHandler接口來捕獲異步執(zhí)行中的異常。

缺點(diǎn):

  • 需要在代碼中手動(dòng)創(chuàng)建線程池,相對(duì)比較繁瑣。
  • 方法必須返回Future或CompletableFuture等類型,否則無法異步執(zhí)行。

3.基于ThreadPoolTaskExecutor的方式

優(yōu)點(diǎn):

  • 基于Spring內(nèi)置的線程池實(shí)現(xiàn),省去手動(dòng)配置線程池的繁瑣過程。
  • 可以設(shè)置隊(duì)列容量和拒絕策略,控制異步任務(wù)的執(zhí)行順序和并發(fā)量。

缺點(diǎn):

略微復(fù)雜,需要手動(dòng)創(chuàng)建ThreadPoolTaskExecutor實(shí)例,并將其注入到需要異步執(zhí)行的方法中。

綜上所述,每種實(shí)現(xiàn)異步任務(wù)的方式各有優(yōu)缺點(diǎn),需要根據(jù)具體需求和場景來選擇適合的方法。

到此這篇關(guān)于三種SpringBoot中實(shí)現(xiàn)異步調(diào)用的方法總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot異步調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突問題

    Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突

    這篇文章主要介紹了Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突問題,通過注釋掉2.0引入的倆包,直接引入3.0,文中結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • spring cloud 配置中心native配置方式

    spring cloud 配置中心native配置方式

    這篇文章主要介紹了spring cloud 配置中心native配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring Boot 中使用cache緩存的方法

    Spring Boot 中使用cache緩存的方法

    Spring Cache是Spring針對(duì)Spring應(yīng)用,給出的一整套應(yīng)用緩存解決方案。下面小編給大家?guī)砹薙pring Boot 中使用cache緩存的方法,感興趣的朋友參考下吧
    2018-01-01
  • Spring中如何動(dòng)態(tài)注入Bean實(shí)例教程

    Spring中如何動(dòng)態(tài)注入Bean實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于Spring中如何動(dòng)態(tài)注入Bean的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • JAVA對(duì)象中使用?static?和?String?基礎(chǔ)探究

    JAVA對(duì)象中使用?static?和?String?基礎(chǔ)探究

    這篇文章主要介紹了JAVA對(duì)象中使用static和String基礎(chǔ)探究,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringDataJpa的@Query注解報(bào)錯(cuò)的解決

    SpringDataJpa的@Query注解報(bào)錯(cuò)的解決

    這篇文章主要介紹了SpringDataJpa的@Query注解報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot項(xiàng)目引入第三方sdk?jar包的解決方案

    SpringBoot項(xiàng)目引入第三方sdk?jar包的解決方案

    這篇文章主要介紹了SpringBoot項(xiàng)目引入第三方sdk?jar包,個(gè)人感覺比較好的解決方案是將 jar上傳到本地的maven倉庫,然后通過pom依賴,引入第三方j(luò)ar包,需要的朋友可以參考下
    2022-05-05
  • java拓展集合工具類CollectionUtils

    java拓展集合工具類CollectionUtils

    這篇文章主要為大家詳細(xì)介紹了java拓展集合工具類CollectionUtils,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • SpringBoot如何訪問本地圖片

    SpringBoot如何訪問本地圖片

    這篇文章主要介紹了SpringBoot如何訪問本地圖片問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringDataJpa:JpaRepository增刪改查操作

    SpringDataJpa:JpaRepository增刪改查操作

    這篇文章主要介紹了SpringDataJpa:JpaRepository增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

湘阴县| 荣成市| 商水县| 绥化市| 晋宁县| 寿宁县| 广东省| 喀什市| 财经| 四平市| 潮安县| 墨竹工卡县| 虹口区| 新密市| 乐昌市| 镇平县| 安化县| 巨野县| 济源市| 东乡县| 安乡县| 奉化市| 宿州市| 长泰县| 土默特右旗| 凯里市| 浦北县| 恩平市| 通榆县| 会宁县| 哈巴河县| 山东| 双柏县| 涪陵区| 淮阳县| 南和县| 剑川县| 宣城市| 旬邑县| 雅安市| 密云县|