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

@Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行

 更新時(shí)間:2022年09月30日 16:27:03   作者:Dily_Su  
這篇文章主要介紹了@Schedule?如何解決定時(shí)任務(wù)推遲執(zhí)行問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

SpringBoot 實(shí)現(xiàn)定時(shí)任務(wù)很簡單,只需要使用**@Scheduled**注解即可,但是該注解是實(shí)現(xiàn)的定時(shí)任務(wù)默認(rèn)是單線程的,也就意味著多個(gè)定時(shí)任務(wù)執(zhí)行時(shí)就可能導(dǎo)致線程堵塞,延緩定時(shí)任務(wù)的執(zhí)行。

下面就一步一步來解決這個(gè)問題。

一、@Scheduled

1、代碼

// 啟用定時(shí)任務(wù)
@EnableScheduling 
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
@Component
public class Task {
    Logger logger = LoggerFactory.getLogger(Task.class);
	// 每五秒執(zhí)行一次
    @Scheduled(cron = "0/5 * * * * ?")
    public void taskTestA() throws InterruptedException {
        logger.info("A:");
        TimeUnit.SECONDS.sleep(20);
    }
  
    // 每十秒執(zhí)行一次
    @Scheduled(cron = "0/10 * * * * ?")
    public void taskTestB() {
        logger.info("B:");
    }
}

2、結(jié)果

代碼

由圖可知,首先這兩個(gè)定時(shí)任務(wù)都是單線程的,但是當(dāng)定時(shí)A執(zhí)行了一次后,由于定時(shí)A中有個(gè)休眠20秒,然后執(zhí)行定時(shí)任務(wù)B,所以線程A第二次執(zhí)行在25秒后才執(zhí)行,這就是由于@Scheduled定時(shí)任務(wù)是單線程,造成的線程堵塞,導(dǎo)致定時(shí)任務(wù)推遲執(zhí)行。

二、@Scheduled + 配置線程池

1、代碼

和前面@Scheduled 相比,僅僅增加了配置線程池

// 若不設(shè)置默認(rèn)為單線程,這里設(shè)置使用線程池,大小為4
spring:
  task:
    scheduling:
      pool:
        size: 4

2、結(jié)果

由圖可知,增加了線程池,這樣使得定時(shí)任務(wù)A和B在不同的線程進(jìn)行執(zhí)行,但是定時(shí)任務(wù)A的第二次執(zhí)行,依舊是在25秒后執(zhí)行,由此可知這種方式其實(shí)解決的是不同定時(shí)任務(wù)之間的進(jìn)程堵塞。

三、@Scheduled + @Async

1、代碼

和前面相比,僅僅增加了配置

// 啟用異步,動(dòng)態(tài)創(chuàng)建線程
@EnableAsync  
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
@Component
public class Task { 
    Logger logger = LoggerFactory.getLogger(Task.class);
    // 異步,動(dòng)態(tài)創(chuàng)建線程
    @Async
    @Scheduled(cron = "0/5 * * * * ?")
    public void taskTestA() throws InterruptedException {
        logger.info("A:");
        TimeUnit.SECONDS.sleep(20);
    }
    // 異步,動(dòng)態(tài)創(chuàng)建線程
    @Async
    @Scheduled(cron = "0/10 * * * * ?")
    public void taskTestB() {
        logger.info("B:");
    }
}

2、結(jié)果

由圖可知,啟用了異步,使用了spring 默認(rèn)的線程池,動(dòng)態(tài)創(chuàng)建線程,這樣使得定時(shí)任務(wù)A和B在不同的線程進(jìn)行執(zhí)行,同時(shí)任務(wù)A的多次運(yùn)行也是異步執(zhí)行,這樣就能確保所有定時(shí)任務(wù)不會(huì)延遲執(zhí)行!

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

相關(guān)文章

  • java 文件上傳到讀取文件內(nèi)容的實(shí)例

    java 文件上傳到讀取文件內(nèi)容的實(shí)例

    今天小編就為大家分享一篇java 文件上傳到讀取文件內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java ArrayBlockingQueue阻塞隊(duì)列的實(shí)現(xiàn)示例

    java ArrayBlockingQueue阻塞隊(duì)列的實(shí)現(xiàn)示例

    ArrayBlockingQueue是一個(gè)基于數(shù)組實(shí)現(xiàn)的阻塞隊(duì)列,本文就來介紹一下java ArrayBlockingQueue阻塞隊(duì)列的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot如何使用MyBatisPlus逆向工程自動(dòng)生成代碼

    SpringBoot如何使用MyBatisPlus逆向工程自動(dòng)生成代碼

    本文介紹如何使用SpringBoot、MyBatis-Plus進(jìn)行逆向工程自動(dòng)生成代碼,并結(jié)合Swagger3.0實(shí)現(xiàn)API文檔的自動(dòng)生成和訪問,通過詳細(xì)步驟和配置,確保Swagger與SpringBoot版本兼容,并通過配置文件和測(cè)試類實(shí)現(xiàn)代碼生成和Swagger文檔的訪問
    2024-12-12
  • java8 利用reduce實(shí)現(xiàn)將列表中的多個(gè)元素的屬性求和并返回操作

    java8 利用reduce實(shí)現(xiàn)將列表中的多個(gè)元素的屬性求和并返回操作

    這篇文章主要介紹了java8 利用reduce實(shí)現(xiàn)將列表中的多個(gè)元素的屬性求和并返回操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot實(shí)現(xiàn)分頁功能

    SpringBoot實(shí)現(xiàn)分頁功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)分頁功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java類加載器層次結(jié)構(gòu)原理解析

    Java類加載器層次結(jié)構(gòu)原理解析

    這篇文章主要介紹了Java類加載器層次結(jié)構(gòu)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java貪吃蛇游戲完善版

    Java貪吃蛇游戲完善版

    這篇文章主要為大家詳細(xì)介紹了Java貪吃蛇游戲完善版,支持菜單操作,鍵盤監(jiān)聽,可加速,減速,統(tǒng)計(jì)得分等功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • springboot跨域CORS處理代碼解析

    springboot跨域CORS處理代碼解析

    這篇文章主要介紹了springboot跨域CORS處理代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Spring Boot 把配置文件和日志文件放到j(luò)ar外部

    Spring Boot 把配置文件和日志文件放到j(luò)ar外部

    如果不想使用默認(rèn)的application.properties,而想將屬性文件放到j(luò)ar包外面,怎么做呢?下面小編給大家?guī)砹藘煞N方法解決Spring Boot 把配置文件和日志文件放到j(luò)ar外部問題,感興趣的朋友一起看看吧
    2018-02-02
  • 詳解Jackson 使用以及性能介紹

    詳解Jackson 使用以及性能介紹

    這篇文章主要介紹了詳解Jackson 使用以及性能介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

壤塘县| 揭阳市| 十堰市| 曲水县| 曲阜市| 山东省| 沙田区| 嘉善县| 华蓥市| 阳原县| 青田县| 辉县市| 仁寿县| 天津市| 扎赉特旗| 南漳县| 凤山市| 皮山县| 呼图壁县| 突泉县| 高密市| 宝丰县| 保德县| 大宁县| 陆川县| 隆昌县| 大丰市| 三河市| 凌云县| 宁蒗| 陕西省| 达日县| 虹口区| 轮台县| 新余市| 财经| 东明县| 息烽县| 和平区| 福鼎市| 日照市|