在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spring Boot如何實現異步任務

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-09-30 10:32 ? 次閱讀

Spring Boot 提供了多種方式來實現異步任務,這里介紹三種主要實現方式。

1、基于注解 @Async

@Async 注解是 Spring 提供的一種輕量級異步方法實現方式,它可以標記在方法上,用來告訴 Spring 這個方法是一個異步方法,Spring 會將這個方法的執行放在異步線程中進行。使用 @Async 注解需要滿足以下條件:

  1. 需要在 Spring Boot 主類上添加 @EnableAsync 注解啟用異步功能;
  2. 需要在異步方法上添加 @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() {
        // 異步任務執行的邏輯
    }
}

2、使用 CompletableFuture 實現異步任務

CompletableFuture 是 Java 8 新增的一個異步編程工具,它可以方便地實現異步任務。使用 CompletableFuture 需要滿足以下條件:

  1. 異步任務的返回值類型必須是 CompletableFuture 類型;
  2. 在異步任務中使用 CompletableFuture.supplyAsync() 或 CompletableFuture.runAsync() 方法來創建異步任務;
  3. 在主線程中使用 CompletableFuture.get() 方法獲取異步任務的返回結果。

示例代碼如下:

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

3、使用 TaskExecutor 實現異步任務

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

  1. 需要在 Spring 配置文件中配置一個 TaskExecutor 實例;
  2. 在異步方法中調用 TaskExecutor 實例的 execute() 方法來執行異步任務。

示例代碼如下:

@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(() - > {
            // 異步任務執行的邏輯
        });
    }
}

4、優缺點總結

這三種實現異步任務的方法各有優缺點,具體如下:

  1. 基于注解的方式

優點:

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

缺點:

  • 方法必須是public,否則異步執行無效。
  • 不能直接獲取異步執行結果,需要使用Future或CompletableFuture等類型。
  1. 實現AsyncConfigurer接口的方式

優點:

  • 更加靈活,可以配置線程池等異步執行的相關參數。
  • 可以通過實現AsyncUncaughtExceptionHandler接口來捕獲異步執行中的異常。

缺點:

  • 需要在代碼中手動創建線程池,相對比較繁瑣。
  • 方法必須返回Future或CompletableFuture等類型,否則無法異步執行。
  1. 基于ThreadPoolTaskExecutor的方式

優點:

  • 基于Spring內置的線程池實現,省去手動配置線程池的繁瑣過程。
  • 可以設置隊列容量和拒絕策略,控制異步任務的執行順序和并發量。

缺點:

  • 略微復雜,需要手動創建ThreadPoolTaskExecutor實例,并將其注入到需要異步執行的方法中。

綜上所述,每種實現異步任務的方式各有優缺點,需要根據具體需求和場景來選擇適合的方法。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8941

    瀏覽量

    153196
  • 文件
    +關注

    關注

    1

    文章

    578

    瀏覽量

    25203
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14878
  • 線程池
    +關注

    關注

    0

    文章

    57

    瀏覽量

    7089
  • 線程
    +關注

    關注

    0

    文章

    507

    瀏覽量

    20075
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Spring Boot定時任務的重寫方法

    Spring Boot應該是目前最火的java開源框架了,它簡化了我們創建一個web服務的過程,讓我們可以在很短時間、基本零配置就可以啟動一個web服務。
    的頭像 發表于 01-20 17:38 ?2652次閱讀

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫Spring
    的頭像 發表于 12-10 22:18 ?815次閱讀

    Spring認證」什么是Spring GraphQL?

    spring-boot-starter-webflux HTTP、WebSocket 彈簧 WebFlux 依賴{ ? ?實現 'org.springframework.experimental
    的頭像 發表于 08-10 14:08 ?983次閱讀
    「<b class='flag-5'>Spring</b>認證」什么是<b class='flag-5'>Spring</b> GraphQL?

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
    的頭像 發表于 09-29 10:24 ?1111次閱讀

    強大的Spring Boot 3.0要來了

    來源:OSC開源社區(ID:oschina2013) Spring Boot 3.0 首個 RC 已發布,此外還為兩個分支發布了更新:2.7.5 2.6.13。 3.0.0-RC1: https
    的頭像 發表于 10-31 11:17 ?2233次閱讀

    用這4招 優雅的實現Spring Boot異步線程間數據傳遞

    Spring Boot 自定義線程池實現異步開發相信看過陳某的文章都了解,但是在實際開發中需要在父子線程之間傳遞一些數據,比如用戶信息,鏈路信息等等
    的頭像 發表于 01-30 10:40 ?1303次閱讀

    Spring Boot Web相關的基礎知識

    Boot的第一個接口。接下來將會將會介紹使用Spring Boot開發Web應用的相關內容,其主要包括使用spring-boot-starter-web組件來
    的頭像 發表于 03-17 15:03 ?831次閱讀

    Spring Boot中整合兩種定時任務的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 中的定時任務實現
    的頭像 發表于 04-07 14:55 ?1776次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩種定時<b class='flag-5'>任務</b>的方法

    Spring Boot中如何使用定時任務

    本文介紹在 Spring Boot 中如何使用定時任務,使用非常簡單,就不做過多說明了。
    的頭像 發表于 04-12 10:56 ?1162次閱讀

    如何使用Spring Boot 2.x和Redis執行異步任務

    Spring 是最流行 Java 應用程序開發框架。因此,Spring 社區也是最大的開源社區之一。除
    的頭像 發表于 06-06 15:57 ?1158次閱讀
    如何使用<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 2.x和Redis執行<b class='flag-5'>異步</b><b class='flag-5'>任務</b>?

    Spring Boot如何優雅實現數據加密存儲、模糊匹配和脫敏

    近來我們都在圍繞著使用Spring Boot開發業務系統時如何保證數據安全性這個主題展開總結,當下大部分的B/S架構的系統也都是基于Spring Boot + SpringMVC三層架
    的頭像 發表于 06-19 14:42 ?2400次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>如何優雅<b class='flag-5'>實現</b>數據加密存儲、模糊匹配和脫敏

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程中,使用過 Spring Boot Actuator 嗎?知道 Spring
    的頭像 發表于 10-09 17:11 ?824次閱讀

    Spring Boot啟動 Eureka流程

    在上篇中已經說過了 Eureka-Server 本質上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 E
    的頭像 發表于 10-10 11:40 ?1132次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發表于 10-13 11:44 ?871次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發表于 10-13 14:56 ?758次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標
    主站蜘蛛池模板: 新午夜影院 | 国内精品视频免费观看 | 18毛片| 69xxxx日本老师 | 2021精品综合久久久久 | 天天性视频 | 特级全毛片 | 伊人网在线视频 | 亚洲网站免费 | 午夜高清免费观看视频 | 午夜一级在线 | 欧美人与禽交 | 我要看一级大片 | 色婷婷五 | 久久久夜夜夜 | 福利片午夜 | 女人张开腿给人桶免费视频 | 亚洲另类激情综合偷自拍 | 亚洲欧美视频 | 日韩插插 | 久久综合欧美成人 | 奇米四色7777 | 国产一级特黄毛片 | 激情五月五月婷婷 | 特黄a大片免费视频 | 成人在线视频网址 | 婷婷在线五月 | 国产农村女人一级毛片了 | 欧美成人一区二区三区在线视频 | 国产免费好大好硬视频 | 久久精品国产精品亚洲婷婷 | 成人影院在线观看视频 | 免费的色视频 | 亚洲www.| a一级| 亚洲一区二区三区免费在线观看 | 又粗又硬又猛又黄的免费视频黑人 | 成人免费看片视频色多多 | 精品卡一卡二 卡四卡视频 精品噜噜噜噜久久久久久久久 | 黄色生活毛片 | 久久99久久精品国产只有 |