springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行
@Scheduled多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行
只需在springBoot啟動(dòng)類上添加
如下代碼即可:
@Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler(); taskExecutor.setPoolSize(50); return taskExecutor; }
@Scheduled多定時(shí)任務(wù),重疊執(zhí)行
@Scheduled如果有兩個(gè)定時(shí)任務(wù)
定時(shí)任務(wù)重復(fù)時(shí),只有一個(gè)可以執(zhí)行。
如下
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MyScheduled { @Scheduled(cron = "0/5 * * * * ?") public void execute1(){ String curName = Thread.currentThread().getName() ; System.out.println("當(dāng)前時(shí)間:"+LocalDateTime.now()+" 任務(wù)execute1對(duì)應(yīng)的線程名: "+curName); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0/5 * * * * ?") public void execute2(){ String curName = Thread.currentThread().getName() ; System.out.println("當(dāng)前時(shí)間:"+LocalDateTime.now()+" 任務(wù)execute2對(duì)應(yīng)的線程名: "+curName); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
通過(guò)執(zhí)行可以看到,打印線程名稱為同一個(gè)。即如果不手動(dòng)指定線程池,則默認(rèn)啟動(dòng)單線程,進(jìn)行執(zhí)行定時(shí)任務(wù)。
如果想要多個(gè)定時(shí)任務(wù)重疊執(zhí)行
需要手動(dòng)指定線程池,如下
import org.springframework.context.annotation.Bean; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component @EnableScheduling public class MyScheduled { @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(50); return taskScheduler; } @Scheduled(cron = "0/5 * * * * ?") public void execute1(){ String curName = Thread.currentThread().getName() ; System.out.println("當(dāng)前時(shí)間:"+LocalDateTime.now()+" 任務(wù)execute1對(duì)應(yīng)的線程名: "+curName); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0/5 * * * * ?") public void execute2(){ String curName = Thread.currentThread().getName() ; System.out.println("當(dāng)前時(shí)間:"+LocalDateTime.now()+" 任務(wù)execute2對(duì)應(yīng)的線程名: "+curName); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
此時(shí),多個(gè)定時(shí)任務(wù),是不通的線程執(zhí)行,同時(shí),定時(shí)任務(wù)可以重疊執(zhí)行。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+mail 輕松實(shí)現(xiàn)各類郵件自動(dòng)推送
在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常需要用到郵件通知功能,例如,通過(guò)郵箱注冊(cè),郵箱找回密碼,郵箱推送報(bào)表等等,實(shí)際的應(yīng)用場(chǎng)景非常的多,今天通過(guò)這篇文章,我們一起來(lái)學(xué)習(xí)如何在 Spring Boot 中快速實(shí)現(xiàn)一個(gè)自動(dòng)發(fā)送郵件的功能2024-07-07防止未登錄用戶操作—基于struts2攔截器的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇防止未登錄用戶操作—基于struts2攔截器的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Mybatis?plus多租戶方案的實(shí)戰(zhàn)踩坑記錄
MybaitsPlus多租戶處理器是一個(gè)對(duì)于多租戶問(wèn)題的解決方案,下面這篇文章主要給大家介紹了關(guān)于Mybatis?plus多租戶方案踩坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯的示例代碼
這篇文章主要介紹了SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08springboot無(wú)法跳轉(zhuǎn)頁(yè)面的問(wèn)題解決方案
這篇文章主要介紹了springboot無(wú)法跳轉(zhuǎn)頁(yè)面的問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09springboot集成redis并使用redis生成全局唯一索引ID
本文主要介紹了springboot集成redis并使用redis生成全局唯一索引ID,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Java實(shí)現(xiàn)AOP面向切面編程的實(shí)例教程
這篇文章主要介紹了Java實(shí)現(xiàn)AOP面向切面編程的實(shí)例教程,通常Java中的AOP都是利用Spring框架中造好的輪子來(lái)開(kāi)發(fā),而本文則關(guān)注于Java本身AOP的設(shè)計(jì)模式實(shí)現(xiàn),需要的朋友可以參考下2016-04-04