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

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

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

服務(wù)器之家 - 編程語言 - Java教程 - Spring @Scheduler使用cron表達(dá)式時(shí)的執(zhí)行問題詳解

Spring @Scheduler使用cron表達(dá)式時(shí)的執(zhí)行問題詳解

2021-05-30 16:08蒼楓露雨 Java教程

Spring給程序猿們帶來了許多便利。下面這篇文章主要給大家介紹了關(guān)于Spring @Scheduler使用cron表達(dá)式時(shí)的執(zhí)行問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

spring scheduler里有兩個(gè)概念:任務(wù)(task)和運(yùn)行任務(wù)的框架(taskexecutor/taskscheduler)。taskexecutor顧名思義,是任務(wù)的執(zhí)行器,允許我們異步執(zhí)行多個(gè)任務(wù)。taskscheduler是任務(wù)調(diào)度器,來運(yùn)行未來的定時(shí)任務(wù)。觸發(fā)器trigger可以決定定時(shí)任務(wù)是否該運(yùn)行了,最常用的觸發(fā)器是crontrigger。spring內(nèi)置了多種類型的taskexecutor和taskscheduler,方便用戶根據(jù)不同業(yè)務(wù)場景選擇。

本文主要介紹了關(guān)于spring @scheduler使用cron表達(dá)式執(zhí)行問題的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧

主要想弄清使用spring @scheduler cron表達(dá)式時(shí)的兩個(gè)問題:

  • 同一定時(shí)任務(wù),第二次觸發(fā)時(shí)間到了,第一次還沒有執(zhí)行完成時(shí)會執(zhí)行嗎?
  • 不同的定時(shí)任務(wù),相互之間是否有影響?

結(jié)論寫在前面:

  • 同一定時(shí)任務(wù),第二次觸發(fā)時(shí)間到了,第一次還沒有執(zhí)行完成時(shí)會執(zhí)行嗎?不會,會等前一次執(zhí)行完成才執(zhí)行下一次
  • 不同的定時(shí)任務(wù),相互之間是否有影響?取決于可用的定時(shí)任務(wù)線程數(shù),如果線程數(shù)足夠則不會影響;如果可用定時(shí)任務(wù)線程數(shù)少于要執(zhí)行定時(shí)任務(wù)數(shù)量,未能獲取到線程的自然要等到有空閑線程時(shí)才能執(zhí)行。

下面是實(shí)驗(yàn)過程。。。。。

使用spring @scheduler 時(shí),默認(rèn)只有一個(gè)線程,針對上面的問題,設(shè)計(jì)了3個(gè)實(shí)驗(yàn):

  1. 設(shè)置scheduler為多線程,設(shè)置一個(gè)線程5秒執(zhí)行一次,方法體為 sleep8秒
  2. 使用scheduler默認(rèn)的單線程,設(shè)置兩個(gè)線程都是5秒執(zhí)行一次,一個(gè) sleep8秒,一個(gè)不sleep
  3. 設(shè)置scheduler為多線程,設(shè)置兩個(gè)線程都是5秒執(zhí)行一次,一個(gè) sleep8秒,一個(gè)不sleep

實(shí)驗(yàn)一

設(shè)置scheduler為多線程,設(shè)置一個(gè)線程5秒執(zhí)行一次,方法體為 sleep8秒:

?
1
2
3
4
5
@scheduled(cron = "*/5 * * * * *")
public void test1() throws interruptedexception {
log.info("test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s");
thread.sleep(8000l);
}

結(jié)果:

2017-10-11 17:49:45 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8
2017-10-11 17:49:55 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8
2017-10-11 17:50:05 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8
2017-10-11 17:50:15 scheduler-2 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8
2017-10-11 17:50:25 scheduler-2 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8
2017-10-11 17:50:35 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8

結(jié)論:

@scheduled使用cron表達(dá)式,設(shè)置為多線程時(shí),同一任務(wù)前一次沒有執(zhí)行完成,不會執(zhí)行下一次

實(shí)驗(yàn)二

使用scheduler默認(rèn)的單線程,設(shè)置兩個(gè)線程都是5秒執(zhí)行一次,一個(gè) sleep8秒,一個(gè)不sleep

如果test2每8秒執(zhí)行一次,則為串行

?
1
2
3
4
5
6
7
8
9
10
@scheduled(cron = "*/5 * * * * *")
public void test1() throws interruptedexception {
system.out.println("test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s");
thread.sleep(8000l);
}
 
@scheduled(cron = "*/5 * * * * *")
public void test2() {
system.out.println("test2, 5秒執(zhí)行一次,不sleep");
}

執(zhí)行結(jié)果:

2017-10-11 17:17:35 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:17:35 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 17:17:43 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:17:45 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 17:17:53 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:17:55 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:17:55 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 17:18:03 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:18:05 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:18:05 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 17:18:13 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:18:15 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 17:18:23 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 17:18:25 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s

對比期望執(zhí)行時(shí)間:

 

執(zhí)行次數(shù) task 期望執(zhí)行時(shí)間 實(shí)際執(zhí)行時(shí)間
1 task1 17:17:35 17:17:35
1 task2 17:17:35 17:17:35
2 task1 17:17:40 17:17:43
2 task2 17:17:40 17:17:45

 

結(jié)論:

@scheduled使用cron表達(dá)式 ,配置為一個(gè)線程時(shí),不同定時(shí)任務(wù)是串行執(zhí)行,且上次沒有執(zhí)行完時(shí)不會執(zhí)行下次

實(shí)驗(yàn)三

設(shè)置scheduler為多線程,設(shè)置兩個(gè)線程都是5秒執(zhí)行一次,一個(gè) sleep8秒,一個(gè)不sleep

?
1
2
3
4
5
6
7
8
9
10
@scheduled(cron = "*/5 * * * * *")
public void test1() throws interruptedexception {
 log.info("test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s");
 thread.sleep(8000l);
}
 
@scheduled(cron = "*/5 * * * * *")
public void test2() {
 log.info("test2, 5秒執(zhí)行一次,不sleep");
}

結(jié)果:

2017-10-11 18:12:40 scheduler-2 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 18:12:40 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 18:12:45 scheduler-2 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 18:12:50 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s
2017-10-11 18:12:50 scheduler-2 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 18:12:55 scheduler-2 test2, 5秒執(zhí)行一次,不sleep
2017-10-11 18:13:00 scheduler-1 test1, 5秒執(zhí)行一次,每次執(zhí)行sleep 8s

對比期望執(zhí)行時(shí)間:

 

執(zhí)行次數(shù) task 期望執(zhí)行時(shí)間 實(shí)際執(zhí)行時(shí)間
1 task1 18:12:40 18:12:40
1 task2 18:12:40 18:12:40
2 task1 18:12:45 18:12:50
2 task2 18:12:45 18:12:45

 

結(jié)論:

@scheduled使用cron表達(dá)式 ,配置為多線程時(shí),不同定時(shí)任務(wù)不是串行執(zhí)行,且上次沒有執(zhí)行完時(shí)不會執(zhí)行下次

設(shè)置定時(shí)任務(wù)為多線程

這里用的是spring boot:

?
1
2
3
4
5
6
7
8
9
10
11
@configuration
public class scheduleconfig {
 
 @bean
 public threadpooltaskscheduler threadpooltaskscheduler() {
  threadpooltaskscheduler scheduler = new threadpooltaskscheduler();
  scheduler.setpoolsize(3);
  scheduler.setthreadnameprefix("scheduler-");
  return scheduler;
 }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://www.cnblogs.com/chrischennx/p/7652087.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产人成激情视频在线观看 | 国产福利一区二区在线精品 | 国产51 | 亚洲区在线播放 | 国产成人免费在线视频 | 无码AV免费精品一区二区三区 | 91综合精品网站久久 | 午夜神器18以下不能进免费 | 超碰97 | 亚洲 欧美 偷自乱 图片 | 国产高清在线观看 | 日韩一区二区三 | 日韩在线免费 | 青草影院在线观看 | 亚洲 欧美 国产 日韩 字幕 | 国产在视频线在精品 | 娇妻与公陈峰姚瑶小说在线阅读 | 国产成人高清亚洲一区91 | 明星乱亚洲 | 国自产拍在线天天更新91 | 欧美亚洲高清日韩成人 | 国产精品久久久久aaaa | 亚洲欧美日韩另类在线一 | 日韩在线观看免费 | 19+韩国女主播激情vip视频在线 | 91手机看片国产永久免费 | 成人日批视频 | 麻麻与子乱肉小说怀孕 | 日本加勒比一区 | 倩女还魂在线观看完整版免费 | 国内精品一区二区三区东京 | 99久久精品久久久久久清纯 | 亚洲国内精品 | porno日本大学生高清 | 国产在线精品观看 | 车上小婕子系列辣文小说 | 97理伦 | 日韩毛片免费线上观看 | xxx中国bbbwww | 506rr亚洲欧美 | 成人午夜爽爽爽免费视频 |