成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

眨眼的功夫,就把定時任務的三種調度策略說得明明白白

開發 架構
Spring Task 有三種模式,分別是:fixedDelay、cron 和 fixedRate。話不多說,這三種模式的用法都很簡單,使用方式也很類似。那么它們究竟有什么不同呢?下面我們通過一個五星級豪華公測的故事來說明一下。

Spring Task 無疑是 Spring 環境下單機定時任務的首選。它用起來非常簡單,功能也夠用。

Spring Task 有三種模式,分別是:fixedDelay、cron 和 fixedRate。話不多說,我們先看代碼:

@Slf4j
@Component
public class TimeTask {
private int[] people = {6, 2, 3, 1};
private int count = 0;
@Scheduled(fixedDelay = 5000)
public void fixedDelayTask() throws InterruptedException {
if (count < 4) {
int timeConsuming = people[count];
log.info("fixedDelayTask-----第 {} 個人在 {} 開始如廁,耗時:{} 秒", count + 1,
formatTime(),
timeConsuming);
Thread.sleep(timeConsuming * 1000L);
count++;
}
}
@Scheduled(cron = "0/5 * * * * ? ")
public void cronTask() throws InterruptedException {
if (count < 4) {
int timeConsuming = people[count];
log.info("cronTask-----第 {} 個人在 {} 開始如廁,耗時:{} 秒", count + 1,
formatTime(),
timeConsuming);
Thread.sleep(timeConsuming * 1000L);
count++;
}
}
@Scheduled(fixedRate = 5000)
public void fixedRateTask() throws InterruptedException {
if (count < 4) {
int timeConsuming = people[count];
log.info("fixedRateTask-----第 {} 個人在 {} 開始如廁,耗時:{} 秒", count + 1,
formatTime(),
timeConsuming);
Thread.sleep(timeConsuming * 1000L);
count++;
}
}
private String formatTime() {
return LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));
}
}

這三種模式的用法都很簡單,使用方式也很類似。那么它們究竟有什么不同呢?下面我們通過一個五星級豪華公測的故事來說明一下。

故事背景

話說某地有一個五星級豪華廁所,大家都喜歡來這里如廁。因此坑位經常供不應求,需要排隊如廁。一天,廁所外有四個人排隊,每個人如廁需要的時間如下:

  • 第一個人 6 秒鐘
  • 第二個人 2 秒鐘
  • 第三個人 3 秒鐘
  • 第四個人 1 秒鐘

從第一個人開始如廁進行計時。

fixedDelay 模式

日志輸出:

fixedDelayTask----- 1 個人在 18:07:23 開始如廁,耗時:6 
fixedDelayTask----- 2 個人在 18:07:34 開始如廁,耗時:2
fixedDelayTask----- 3 個人在 18:07:41 開始如廁,耗時:3
fixedDelayTask----- 4 個人在 18:07:49 開始如廁,耗時:1

@Scheduled(fixedDelay = 5000)。

廁所在該模式下有一個特點:每次用完廁所后,需要有 5 秒鐘的廁所自潔時間,需要對廁所進行清潔消毒等工作,從而保證下次使用的時候依然干凈衛生。執行情況如圖所示:

上個廁所的功夫,就把定時任務的三種調度策略說得明明白白

  1. 第一個人在第 0 秒時開始如廁,6 秒后結束,廁所需要 5 秒鐘的自潔時間。
  2. 第二個人在第 11 秒(6+5)時開始如廁,2 秒后結束,廁所需要 5 秒鐘的自潔時間。
  3. 第三個人在第 18 秒(11+2+5)時開始如廁,3 秒后結束,廁所需要 5 秒鐘的自潔時間。
  4. 第四個人在第 26 秒 (18+3+5)時開始如廁,1 秒后結束…

Cron 模式

日志輸出:

cronTask----- 1 個人在 18:09:15 開始如廁,耗時:6 
cronTask----- 2 個人在 18:09:25 開始如廁,耗時:2
cronTask----- 3 個人在 18:09:30 開始如廁,耗時:3
cronTask----- 4 個人在 18:09:35 開始如廁,耗時:1

@Scheduled(cron = "0/5 * * * * ? ")。

在該模式下,廁所只在時間秒數 5 的整數倍時準許人員進入使用。因為通過嚴謹的科學分析,發現在秒數為 5 的整數倍時如廁體驗更佳,所以只有當前時間秒數為 5 的整數倍時才可以進入。并且,五星級豪華公廁升級設備,可以在如廁完成的瞬間完成自潔消毒,因此不再需要額外的自潔時間了,也提升了廁所利用率。執行情況如圖所示:

上個廁所的功夫,就把定時任務的三種調度策略說得明明白白

  1. 第一個人在 18:09:15 時開始如廁,6 秒后(18:09:21)結束,下一個如廁吉時為 18:09:25。
  2. 第二個人在 18:09:25 時開始如廁,2 秒后(18:09:27)結束,下一個如廁吉時為 18:09:30。
  3. 第三個人在 18:09:30 時開始如廁,3 秒后(18:09:33)結束,下一個如廁吉時為 18:09:35。
  4. 第四個人在 18:09:35 時開始如廁,1 秒后(18:09:36)結束…

fixedRate 模式

日志輸出:

fixedRateTask----- 1 個人在 18:10:18 開始如廁,耗時:6 
fixedRateTask----- 2 個人在 18:10:24 開始如廁,耗時:2
fixedRateTask----- 3 個人在 18:10:28 開始如廁,耗時:3
fixedRateTask----- 4 個人在 18:10:33 開始如廁,耗時:1

@Scheduled(fixedRate = 5000)。

經過長時間的大數據分析,得出一個結論——人的最佳如廁時長是 5 秒鐘。所以在該模式下,人們如廁前,廁所會根據等待人數提前制定出如廁計劃,即為每位等待者分配 5 秒鐘如廁時間。但是有一個規則:當如廁者提前結束,那么下一個人仍然需要等夠 5 秒鐘;而當如廁者超時以后,待廁者可以在上一人完成時立即如廁。那么:

如廁計劃如下:

  1. 第一個人:第 0 秒進入
  2. 第二個人:第 5 秒進入
  3. 第三個人:第 10 秒進入
  4. 第四個人:第 15 秒進入

根據故事背景中每個人如廁時間,實際情況如圖所示:

上個廁所的功夫,就把定時任務的三種調度策略說得明明白白

  1. 第一個人在第 0 秒時,即 18:10:18 時開始如廁,6 秒后結束,超時,第二個人無縫如廁;
  2. 第二個人在第 6 秒(0+6)時,即 18:10:24 開始如廁,2 秒后結束,未超時,第三個人等待 2 秒,按計劃時間如廁;
  3. 第三個人在第 10 秒(6+2+2)時,即 18:10:28 開始如廁,3 秒后結束,未超時,第四個人等待 2 秒按計劃如廁;
  4. 第四個人在第 15 秒 (6+2+2+3+2)時,即 18:10:33 開始如廁,1 秒后結束…

Cron 表達式

Cron 模式是定時任務中最強大的觸發策略,可以應對更多的情況。一個 Cron 表達式總共有 7 個元素,分別如下表所示:

時間單位

是否必填

取值范圍

通配符

0-59 的整數

, - * / 四個字符

0-59 的整數

, - * / 四個字符

0-23 的整數

, - * / 四個字符

1-31 的整數(需要考慮該月的具體天數)

,- * ? / L W C 八個字符

1~12 的整數或者 JAN-DEC

, - * / 四個字符

1~7 的整數或者 SUN-SAT (1=SUN)

, - * ? / L C # 八個字符

1970~2099

, - * / 四個字符

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-02-23 08:10:18

Nginx反向代理負載均衡器

2020-02-10 19:42:01

CPIP 協議,

2011-04-27 17:05:39

2010-09-06 17:35:03

PPPOE配置

2011-11-04 16:49:26

Action BarAndroid

2010-08-03 09:17:00

2021-09-26 07:38:39

組合問題數據結構算法

2010-06-29 14:38:14

Linux服務器

2010-07-05 15:33:49

2012-02-20 21:59:08

無線路由設置

2010-10-08 15:05:00

無線路由設置

2021-09-30 09:59:23

OSPF網絡協議網絡技術

2025-01-08 09:55:37

Spring接口數據庫

2010-08-06 10:00:05

負載均衡

2010-08-25 09:09:58

2010-10-15 10:01:19

無線網絡構建

2010-09-09 09:52:03

Linux服務器

2010-07-14 09:55:12

2013-05-23 11:16:28

大數據技術大數據AdTime

2010-01-13 17:07:21

防輻射機箱選購
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 成人精品国产 | 亚洲精品福利视频 | 国产视频一区二区 | 视频在线观看一区二区 | 一级欧美 | 中文字幕人成人 | av黄色免费在线观看 | 91精品在线看 | 精品欧美一区二区三区久久久 | yiren22 亚洲综合 | 伊人久久精品一区二区三区 | 天堂一区二区三区 | 91视频在线看 | 亚洲天堂成人在线视频 | 97国产超碰 | av在线免费观看网站 | 91人人澡人人爽 | 日本欧美在线观看视频 | 国产精品无码专区在线观看 | 国产成人精品一区二区三区在线 | 在线国产小视频 | 日韩一区二区三区在线观看 | 久久99精品久久久久久国产越南 | 久久精品在线免费视频 | 国内精品视频一区二区三区 | 久久一区二区三区四区 | 亚洲国产精品精华素 | 久久y| 国产精品一区视频 | 欧美高清成人 | 成人一区二| 91精品国产91久久久 | 在线观看国产精品一区二区 | 日韩欧美在线不卡 | 九九热免费在线观看 | 91精品入口蜜桃 | 日韩欧美在线观看视频 | 日韩在线免费观看视频 | 精品久久久久一区二区国产 | 国产精品成人一区 |