欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

三種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):

  • 簡(jiǎ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ù)具體需求和場(chǎng)景來選擇適合的方法。

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

相關(guān)文章

  • Springboot中yml對(duì)于list列表配置方式詳解

    Springboot中yml對(duì)于list列表配置方式詳解

    這篇文章主要介紹了Springboot中yml對(duì)于list列表配置方式詳解,使用@ConfigurationProperties讀取yml配置文件過程中會(huì)遇到讀取yml文件中列表,Config里面使用List集合接收,方法比較簡(jiǎn)單,需要的朋友可以參考下
    2023-11-11
  • Windows安裝Maven并配置環(huán)境變量

    Windows安裝Maven并配置環(huán)境變量

    Maven是一個(gè)基于Java的項(xiàng)目管理工具,可以管理項(xiàng)目的構(gòu)建、測(cè)試和部署,本文就來介紹一下Windows安裝Maven并配置環(huán)境變量,感興趣的可以了解一下
    2024-11-11
  • 淺析Java Scanner 類的用法

    淺析Java Scanner 類的用法

    這篇文章主要介紹了Java Scanner 類的用法,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Netty內(nèi)存池泄漏問題以解決方案

    Netty內(nèi)存池泄漏問題以解決方案

    這篇文章主要介紹了Netty內(nèi)存池泄漏問題以解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring中的FactoryBean與ObjectFactory詳解

    Spring中的FactoryBean與ObjectFactory詳解

    這篇文章主要介紹了Spring中的FactoryBean與ObjectFactory詳解,FactoryBean是一種特殊的bean,本身又是個(gè)工廠,實(shí)現(xiàn)了FactoryBean的bean會(huì)被注冊(cè)到容器中,需要的朋友可以參考下
    2023-12-12
  • JMeter配置元件詳解

    JMeter配置元件詳解

    JMeter提供了豐富的配置元件,常用的包括參數(shù)化配置元件、HTTP請(qǐng)求默認(rèn)值、HTTP信息頭管理器、計(jì)數(shù)器等,本文就詳細(xì)的介紹一下這些元件的使用,感興趣的可以了解一下
    2021-12-12
  • 一文帶你掌握J(rèn)ava ImageIO類

    一文帶你掌握J(rèn)ava ImageIO類

    Java中的ImageIO類是Java標(biāo)準(zhǔn)庫中用于處理圖像的一個(gè)非常常用的 API,它提供了讀取和寫入多種常見圖像格式的功能,如JPEG、PNG、BMP、GIF等,本文將全面詳細(xì)地介紹Java中的ImageIO類的使用方法,需要的朋友可以參考下
    2023-05-05
  • java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο?

    java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο?

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο螅闹惺纠a介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • java字符串與日期類型轉(zhuǎn)換的工具類

    java字符串與日期類型轉(zhuǎn)換的工具類

    這篇文章主要為大家詳細(xì)介紹了java字符串與日期類型轉(zhuǎn)換的工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Spring oxm入門實(shí)例

    Spring oxm入門實(shí)例

    這篇文章主要介紹了Spring oxm入門實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12

最新評(píng)論