java中多個(gè)@Scheduled定時(shí)器不執(zhí)行的解決方法
項(xiàng)目背景:在項(xiàng)目中包含兩個(gè)定時(shí)任務(wù),配置信息如下:
1、@Scheduled(initialDelay = 1,fixedDelay=10000)
public voud aa(){}
1、@Scheduled(initialDelay = 1,fixedDelay=10000)
public voud bb(){}
我們需要的都是項(xiàng)目啟動(dòng)后,同時(shí)調(diào)用執(zhí)行aa 和bb 方法,我們發(fā)現(xiàn)只能執(zhí)行其中一個(gè)!那么如何解決呢?
原因是:@Scheduled注解會(huì)在默認(rèn)情況下以單線程的方式執(zhí)行定時(shí)任務(wù)。
這個(gè)“單線程”指兩個(gè)方面:
如果一個(gè)定時(shí)任務(wù)執(zhí)行時(shí)間大于其任務(wù)間隔時(shí)間,那么下一次將會(huì)等待上一次執(zhí)行結(jié)束后再繼續(xù)執(zhí)行。
如果多個(gè)定時(shí)任務(wù)在同一時(shí)刻執(zhí)行,任務(wù)會(huì)依次執(zhí)行。
我們項(xiàng)目都是配置了initialDelay =1 ,Scheduled啟動(dòng)一個(gè)的時(shí)候,另外一個(gè)根本得不到執(zhí)行!當(dāng)然fixedDelay是可以正常按照執(zhí)行間隔來執(zhí)行的,就是首次執(zhí)行收到影響!
為了讓@Scheduled效率更高,我們可以通過兩種方法將定時(shí)任務(wù)變成多線程執(zhí)行::
方法1、在啟動(dòng)類中配置TaskScheduler線程池大小
@Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(10);//不配置默認(rèn)是1 return taskScheduler; }
方法2、利用Spring提供的@Async注解和@EnableAsync注解
@Component @EnableAsync public class TimedTask{ @Async @Scheduled(initialDelay = 1,fixedDelay=10000) public void aa() { //執(zhí)行你的業(yè)務(wù)邏輯 } @Async @Scheduled(initialDelay = 1,fixedDelay=10000) public void bb() { //執(zhí)行你的業(yè)務(wù)邏輯 }
總結(jié)
到此這篇關(guān)于java中多個(gè)@Scheduled定時(shí)器不執(zhí)行的文章就介紹到這了,更多相關(guān)java多個(gè)@Scheduled定時(shí)器不執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java空格替換逗號(hào)的實(shí)現(xiàn)示例
在編程中,我們經(jīng)常需要對字符串進(jìn)行各種處理,其中一個(gè)常見的需求是將字符串中的逗號(hào)替換為空格,本文主要介紹了Java空格替換逗號(hào)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01教你如何用Jenkins自動(dòng)化部署項(xiàng)目(從零到搭建完成)
這篇文章主要介紹了教你如何用Jenkins自動(dòng)化部署項(xiàng)目(從零到搭建完成),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式總結(jié)
Linux是集多種功能于一身的操作系統(tǒng),它可以讓用戶查看和管理當(dāng)下正在運(yùn)行的進(jìn)程,包括Java程序,這篇文章主要給大家總結(jié)介紹了關(guān)于linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式,需要的朋友可以參考下2023-10-10Java內(nèi)存模型之happens-before概念詳解
happens-before原則非常重要,它是判斷數(shù)據(jù)是否存在競爭、線程是否安全的主要依據(jù),依靠這個(gè)原則,我們解決在并發(fā)環(huán)境下兩操作之間是否可能存在沖突的所有問題。下面我們就一個(gè)簡單的例子稍微了解下happens-before知識(shí),感興趣的朋友一起看看吧2021-06-06