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

SpringBoot項(xiàng)目如何使用多線程執(zhí)行定時(shí)任務(wù)

 更新時(shí)間:2025年01月14日 09:34:01   作者:左直拳  
在SpringBoot項(xiàng)目中使用多線程執(zhí)行定時(shí)任務(wù),可以避免一個(gè)耗時(shí)任務(wù)影響其他任務(wù),通過配置線程池任務(wù)調(diào)度器,Spring會(huì)自動(dòng)使用多線程執(zhí)行定時(shí)任務(wù)

SpringBoot使用多線程執(zhí)行定時(shí)任務(wù)

我在一個(gè)Spring Boot項(xiàng)目中,采用定時(shí)器執(zhí)行一些操作,比如10秒就發(fā)送一次數(shù)據(jù)。

這些操作有2個(gè),如下所示。

我就想,雖然這兩個(gè)操作各自指定了時(shí)間頻率,但如果其中一個(gè)操作非常耗時(shí),會(huì)不會(huì)影響其他操作呢?

答案是會(huì)。

@Service
public class ShareDataBySend {
    @Autowired
    SendDataService sendDataService;

	//操作1
    @Scheduled(fixedRateString = "${sff.interval}")  // 每 * 秒執(zhí)行一次
    private void send() {
        sendDataService.sendThem();
    }

	//操作2
    @Scheduled(fixedRateString = "${sff.interval}")  // 每 * 秒執(zhí)行一次
    private void send2() {
        sendDataService.sendNce();
    }
}

怎么辦呢?AI告訴我,引入多線程。

引入多線程

上面代碼中,使用了注解@Scheduled。這個(gè)注解告訴 Spring ,它需要定期執(zhí)行標(biāo)注的方法。@Scheduled依賴于 Spring 的任務(wù)調(diào)度機(jī)制,默認(rèn)使用一個(gè)單線程的任務(wù)調(diào)度器執(zhí)行任務(wù)。如果沒有顯式地配置線程池,所有的定時(shí)任務(wù)都會(huì)在同一個(gè)線程中按順序執(zhí)行。然而,當(dāng)我們配置一個(gè)線程池任務(wù)調(diào)度器時(shí),Spring 會(huì)自動(dòng)使用這個(gè)調(diào)度器,這樣每個(gè)定時(shí)任務(wù)(如 send() 和 send2())就會(huì)在不同的線程中并發(fā)執(zhí)行。

也就是說,我們不需要修改上面這個(gè)ShareDataBySend類,而是新注冊(cè)一個(gè)線程池任務(wù)調(diào)度器,系統(tǒng)就會(huì)自動(dòng)改用多線程。這一切,都源自于Spring Boot框架的本身機(jī)制。

代碼示例

1、新增線程池任務(wù)調(diào)度器配置類

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
    /**
     * 我們將默認(rèn)的單線程調(diào)度器替換成了 ThreadPoolTaskScheduler,并設(shè)置了線程池大?。ɡ?10)。
     * 這意味著多達(dá) 10 個(gè)任務(wù)可以并發(fā)執(zhí)行。
     */
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(10);  // 設(shè)置線程池大小,可根據(jù)需要調(diào)整
        taskScheduler.initialize();
        taskRegistrar.setTaskScheduler(taskScheduler);
    }
}

在系統(tǒng)啟動(dòng)的時(shí)候,Spring Boot會(huì)將帶有@Config注解的類型實(shí)例化到容器中,因此SchedulerConfig 配置的 ThreadPoolTaskScheduler 被初始化。

當(dāng)定時(shí)任務(wù)觸發(fā)時(shí)(根據(jù) @Scheduled 的定義),任務(wù)被提交給 ThreadPoolTaskScheduler 處理。

如果有多個(gè)任務(wù),它們會(huì)被分配到線程池中的不同線程上執(zhí)行,從而實(shí)現(xiàn)并發(fā)。

2、原ShareDataBySend類

不需要作任何修改

總結(jié)

我用java也有好幾年了。其實(shí)一直都是在用Spring Boot。Spring Boot是一個(gè)java開發(fā)框架,但我感覺Spring Boot已經(jīng)足夠優(yōu)秀和方便,對(duì)于我來說,Spring Boot == Java。當(dāng)然了,本質(zhì)上,Spring Boot可以算是J2EE的一個(gè)流派,但青出于藍(lán)。

另外,我就相同的問題,分別問通義千問和chatGPT,前者給出的方案不僅繁瑣,而且有錯(cuò)誤。這或許不是模型的問題,而是模型訓(xùn)練的材料有問題。也就是說,也許中文世界中,編程問題的答案質(zhì)量,與老外相比,不在一個(gè)檔次內(nèi)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在mybatis中使用mapper進(jìn)行if條件判斷

    在mybatis中使用mapper進(jìn)行if條件判斷

    這篇文章主要介紹了在mybatis中使用mapper進(jìn)行if條件判斷,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 關(guān)于解決iReport4.1.1無法正常啟動(dòng)或者閃退或者JDK8不兼容的問題

    關(guān)于解決iReport4.1.1無法正常啟動(dòng)或者閃退或者JDK8不兼容的問題

    在安裝使用iReport的過程中遇到一個(gè)問題,我的iReport始終不能打開,困擾了我好久。接下來通過本文給大家介紹iReport4.1.1無法正常啟動(dòng)或者閃退或者JDK8不兼容的問題,需要的朋友可以參考下
    2018-09-09
  • Java超詳細(xì)分析講解哈希表

    Java超詳細(xì)分析講解哈希表

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過把關(guān)鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點(diǎn)復(fù)雜,我想我舉個(gè)例子你就會(huì)明白了,最典型的的例子就是字典
    2022-06-06
  • java打印指定年月的日歷

    java打印指定年月的日歷

    這篇文章主要為大家詳細(xì)介紹了Java如何打印指定年月的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • sa-token整合springboot中的代碼示例展示

    sa-token整合springboot中的代碼示例展示

    sa-token?是一個(gè)輕量級(jí)的 Java 權(quán)限認(rèn)證框架,它可以很方便地集成到 Spring Boot 項(xiàng)目中,以提供簡潔的認(rèn)證和授權(quán)功能,這篇文章主要介紹了sa-token整合springboot中的代碼示例展示,需要的朋友可以參考下
    2024-04-04
  • Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)分表

    Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)分表

    當(dāng)數(shù)據(jù)量比較多時(shí),放在一個(gè)表中的時(shí)候會(huì)影響查詢效率,本文主要介紹了Mybatis攔截器實(shí)現(xiàn)數(shù)據(jù)分表,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Java中該如何優(yōu)雅的使用線程池詳解

    Java中該如何優(yōu)雅的使用線程池詳解

    在java開發(fā)中我們對(duì)“池”的概念并不陌生,常見的有數(shù)據(jù)庫連接池、線程池、對(duì)象池、常量池等等,其作用基本上就是避免頻繁的創(chuàng)建和回收,造成資源浪費(fèi),線程池也不例外,這篇文章主要給大家介紹了關(guān)于Java中該如何優(yōu)雅的使用線程池的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 關(guān)于springboot打包目錄全解析

    關(guān)于springboot打包目錄全解析

    這篇文章主要介紹了springboot打包目錄解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • MyBatis-Plus多表聯(lián)查(動(dòng)態(tài)查詢)的項(xiàng)目實(shí)踐

    MyBatis-Plus多表聯(lián)查(動(dòng)態(tài)查詢)的項(xiàng)目實(shí)踐

    本文主要介紹了MyBatis-Plus多表聯(lián)查(動(dòng)態(tài)查詢)的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SpringBoot中Aware接口使用及原理解析

    SpringBoot中Aware接口使用及原理解析

    在Spring中存在一個(gè)Aware接口,實(shí)現(xiàn)該接口可以讓我們的Bean獲取到Spring容器中特定的資源,但該接口只是個(gè)標(biāo)記接口,不存在任何方法,本文將給大家詳細(xì)介紹一下SpringBoot中Aware接口使用及原理,需要的朋友可以參考下
    2023-08-08

最新評(píng)論