一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題

聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題

2022-03-09 00:48正兒八經(jīng)的胡說(shuō)八道 Java教程

這篇文章主要介紹了聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot @Scheduled的并發(fā)

由于SpringBoot自帶的@Scheduled是一個(gè)阻塞執(zhí)行的定時(shí)任務(wù),所以效率會(huì)很慢,就會(huì)造成同一個(gè)時(shí)間段內(nèi)只有一個(gè)定時(shí)任務(wù)在執(zhí)行,其余的就會(huì)阻塞

現(xiàn)有兩個(gè)定時(shí)任務(wù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Component("aa")
public class aa {
    @Scheduled(cron = "0 44 17 * * ?")
    public void bb() {
        try {
            System.out.println("aa執(zhí)行時(shí)間:" + new Date());
            Thread.sleep(65000);
            System.out.println("aa完成時(shí)間:" + new Date());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
@Component("bb")
public class bb {
    @Scheduled(cron = "0 55 17 * * ?")
    public void aa() {
        try {
            System.out.println("bb執(zhí)行時(shí)間:" + new Date());
            Thread.sleep(10000);
            System.out.println("bb完成時(shí)間:" + new Date());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

默認(rèn)的在啟動(dòng)項(xiàng)加入@EnableScheduling注解就可以運(yùn)行了

聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題

最終,執(zhí)行的結(jié)果令人大跌眼鏡。

聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題

aa的任務(wù)由于執(zhí)行時(shí)間需要65秒,超過(guò)了bb任務(wù)執(zhí)行的時(shí)間,結(jié)果bb任務(wù)執(zhí)行的時(shí)間被阻塞掉,延遲了5秒執(zhí)行。

解決方法是在啟動(dòng)項(xiàng)類(lèi)中加入如下配置即可

?
1
2
3
4
5
6
@Bean
   public TaskScheduler taskScheduler() {
       ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
       taskScheduler.setPoolSize(50);
       return taskScheduler;
   }

如果是xml

?
1
2
3
4
<!-- 注解式 -->
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>

spring @Scheduled 并發(fā)執(zhí)行

spring @Scheduled ,默認(rèn)基于單線程執(zhí)行,如果需要基于多線程執(zhí)行,需要在配置文件中配置如下

?
1
2
queue-capacity="500" rejection-policy="CALLER_RUNS" />
scheduler="scheduler" />

具體可以參考spring 幫助文檔對(duì)annotation-driven的executor和scheduler的解釋

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

原文鏈接:https://blog.csdn.net/weixin_43958556/article/details/116456909

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黑人巨大vs北条麻妃在线 | 免费人成在线观看视频播放 | 91se精品免费观看 | 亚洲精品国产成人 | 福利视频一区二区思瑞 | 韩国成人毛片aaa黄 含羞草国产亚洲精品岁国产精品 | 高清国产欧美一v精品 | seetube18日本第一次 | 男人和女人全黄一级毛片 | 免费在线观看中文字幕 | 日本草草视频 | 成人在线视频在线观看 | 99re最新网址 | 无套啪啪 | 成年人在线视频观看 | 成年人福利视频 | 日本护士撒尿xxxx欧美 | 激情小说欧美图片 | 高清毛片一区二区三区 | 日韩香蕉视频 | 日本一区二区在线不卡 | 国产1广场舞丰满老女偷 | 久久99精国产一区二区三区四区 | 日本动漫黄网站在线观看 | 亚洲精品免费在线 | 爽好舒服快想要免费看 | 免费网址在线观看入口推荐 | 18free性欧美另类hd | 日韩一区二区三区在线 | 精品久久免费视频 | 插得好爽 | 爽好紧别夹宝贝叫大声点护士 | 美日韩在线观看 | 喜欢老头吃我奶躁我的动图 | 男人捅女人的鸡鸡 | 91香蕉国产在线观看免费永久 | 动漫人物差差插曲漫画 | 国产一区国产二区国产三区 | 国产1广场舞丰满老女偷 | 精品视频在线免费观看 | 亚洲区视频在线观看 |