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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot如何實(shí)現(xiàn)異步任務(wù)

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-30 10:32 ? 次閱讀

Spring Boot 提供了多種方式來(lái)實(shí)現(xiàn)異步任務(wù),這里介紹三種主要實(shí)現(xiàn)方式。

1、基于注解 @Async

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

  1. 需要在 Spring Boot 主類(lèi)上添加 @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() {
        // 異步任務(wù)執(zhí)行的邏輯
    }
}

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

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

  1. 異步任務(wù)的返回值類(lèi)型必須是 CompletableFuture 類(lèi)型;
  2. 在異步任務(wù)中使用 CompletableFuture.supplyAsync() 或 CompletableFuture.runAsync() 方法來(lái)創(chuàng)建異步任務(wù);
  3. 在主線程中使用 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(),用來(lái)執(zhí)行異步任務(wù)。使用 TaskExecutor 需要滿足以下條件:

  1. 需要在 Spring 配置文件中配置一個(gè) TaskExecutor 實(shí)例;
  2. 在異步方法中調(diào)用 TaskExecutor 實(shí)例的 execute() 方法來(lái)執(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組件無(wú)縫協(xié)作。

缺點(diǎn):

  • 方法必須是public,否則異步執(zhí)行無(wú)效。
  • 不能直接獲取異步執(zhí)行結(jié)果,需要使用Future或CompletableFuture等類(lèi)型。
  1. 實(shí)現(xiàn)AsyncConfigurer接口的方式

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

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

缺點(diǎn):

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

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

  • 基于Spring內(nèi)置的線程池實(shí)現(xiàn),省去手動(dòng)配置線程池的繁瑣過(guò)程。
  • 可以設(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)景來(lái)選擇適合的方法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8944

    瀏覽量

    153207
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    578

    瀏覽量

    25210
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14880
  • 線程池
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    7089
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    507

    瀏覽量

    20078
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Spring Boot定時(shí)任務(wù)的重寫(xiě)方法

    Spring Boot應(yīng)該是目前最火的java開(kāi)源框架了,它簡(jiǎn)化了我們創(chuàng)建一個(gè)web服務(wù)的過(guò)程,讓我們可以在很短時(shí)間、基本零配置就可以啟動(dòng)一個(gè)web服務(wù)。
    的頭像 發(fā)表于 01-20 17:38 ?2653次閱讀

    Spring Boot從零入門(mén)1 詳述

    在開(kāi)始學(xué)習(xí)Spring Boot之前,我之前從未接觸過(guò)Spring相關(guān)的項(xiàng)目,Java基礎(chǔ)還是幾年前自學(xué)的,現(xiàn)在估計(jì)也忘得差不多了吧,寫(xiě)Spring
    的頭像 發(fā)表于 12-10 22:18 ?816次閱讀

    Spring認(rèn)證」什么是Spring GraphQL?

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

    Spring Boot特有的實(shí)踐

    Spring Boot是最流行的用于開(kāi)發(fā)微服務(wù)的Java框架。在本文中,我將與你分享自2016年以來(lái)我在專業(yè)開(kāi)發(fā)中使用Spring Boot所采用的最佳實(shí)踐。這些內(nèi)容是基于我的個(gè)人經(jīng)驗(yàn)
    的頭像 發(fā)表于 09-29 10:24 ?1113次閱讀

    強(qiáng)大的Spring Boot 3.0要來(lái)了

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

    用這4招 優(yōu)雅的實(shí)現(xiàn)Spring Boot異步線程間數(shù)據(jù)傳遞

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

    Spring Boot Web相關(guān)的基礎(chǔ)知識(shí)

    Boot的第一個(gè)接口。接下來(lái)將會(huì)將會(huì)介紹使用Spring Boot開(kāi)發(fā)Web應(yīng)用的相關(guān)內(nèi)容,其主要包括使用spring-boot-starter-web組件來(lái)
    的頭像 發(fā)表于 03-17 15:03 ?834次閱讀

    Spring Boot中整合兩種定時(shí)任務(wù)的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個(gè) Spring 中的定時(shí)任務(wù)實(shí)現(xiàn)
    的頭像 發(fā)表于 04-07 14:55 ?1778次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩種定時(shí)<b class='flag-5'>任務(wù)</b>的方法

    Spring Boot中如何使用定時(shí)任務(wù)

    本文介紹在 Spring Boot 中如何使用定時(shí)任務(wù),使用非常簡(jiǎn)單,就不做過(guò)多說(shuō)明了。
    的頭像 發(fā)表于 04-12 10:56 ?1163次閱讀

    如何使用Spring Boot 2.x和Redis執(zhí)行異步任務(wù)

    Spring 是最流行 Java 應(yīng)用程序開(kāi)發(fā)框架。因此,Spring 社區(qū)也是最大的開(kāi)源社區(qū)之一。除
    的頭像 發(fā)表于 06-06 15:57 ?1160次閱讀
    如何使用<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 2.x和Redis執(zhí)行<b class='flag-5'>異步</b><b class='flag-5'>任務(wù)</b>?

    Spring Boot如何優(yōu)雅實(shí)現(xiàn)數(shù)據(jù)加密存儲(chǔ)、模糊匹配和脫敏

    近來(lái)我們都在圍繞著使用Spring Boot開(kāi)發(fā)業(yè)務(wù)系統(tǒng)時(shí)如何保證數(shù)據(jù)安全性這個(gè)主題展開(kāi)總結(jié),當(dāng)下大部分的B/S架構(gòu)的系統(tǒng)也都是基于Spring Boot + SpringMVC三層架
    的頭像 發(fā)表于 06-19 14:42 ?2407次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>如何優(yōu)雅<b class='flag-5'>實(shí)現(xiàn)</b>數(shù)據(jù)加密存儲(chǔ)、模糊匹配和脫敏

    Spring Boot Actuator快速入門(mén)

    不知道大家在寫(xiě) Spring Boot 項(xiàng)目的過(guò)程中,使用過(guò) Spring Boot Actuator 嗎?知道 Spring
    的頭像 發(fā)表于 10-09 17:11 ?830次閱讀

    Spring Boot啟動(dòng) Eureka流程

    在上篇中已經(jīng)說(shuō)過(guò)了 Eureka-Server 本質(zhì)上是一個(gè) web 應(yīng)用的項(xiàng)目,今天就來(lái)看看 Spring Boot 是怎么啟動(dòng) Eureka 的。 Spring Boot 啟動(dòng) E
    的頭像 發(fā)表于 10-10 11:40 ?1134次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動(dòng) Eureka流程

    Spring Boot的啟動(dòng)原理

    可能很多初學(xué)者會(huì)比較困惑,Spring Boot 是如何做到將應(yīng)用代碼和所有的依賴打包成一個(gè)獨(dú)立的 Jar 包,因?yàn)閭鹘y(tǒng)的 Java 項(xiàng)目打包成 Jar 包之后,需要通過(guò) -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?887次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動(dòng)原理

    Spring Boot 的設(shè)計(jì)目標(biāo)

    什么是Spring Boot Spring BootSpring 開(kāi)源組織下的一個(gè)子項(xiàng)目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?766次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設(shè)計(jì)目標(biāo)
    主站蜘蛛池模板: 动漫精品成人免费网站 | 欧美性受xxxx极品 | 国产精品视频永久免费播放 | 黄色大视频 | 婷婷久久综合网 | 欧美干色 | 欧美巨波霸乳影院67194 | 成年人网站免费观看 | 好硬好湿好爽再深一点h视频 | 久久精品国产精品亚洲毛片 | 免费两性的视频网站 | 97人人模人人揉人人捏 | 天天色综合1 | 97成人在线视频 | 浓厚な接吻と肉体の交在线观看 | www淫| 在线精品国产成人综合第一页 | 男女交性高清视频无遮挡 | 亚洲va国产va天堂va久久 | yiren22亚洲综合高清一区 | 国产真实乱在线更新 | 一区二区在线看 | 99久久久久久久 | 久久美女视频 | 涩999| 天天色天天色 | 成人在线综合网 | 亚洲综合香蕉 | 国产操女 | 99r8这里精品热视频免费看 | 黄色一区二区三区 | 一级特黄aaa大片大全 | 色视频2 | 婷婷开心激情 | 三级在线观看视频网站 | 色网综合| 在线精品91青草国产在线观看 | 濑亚美莉vs黑人欧美视频 | 三级黄色片在线播放 | 思思久久96热在精品不卡 | 午夜欧美日韩 |