最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

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

2022-07-03 18:28 作者:劉水鏡  | 我要投稿

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

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


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


故事背景

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

  • 第一個人 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 秒鐘的廁所自潔時間,需要對廁所進行清潔消毒等工作,從而保證下次使用的時候依然干凈衛(wèi)生。執(zhí)行情況如圖所示:



  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 * * * * ? ")

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



  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)

經(jīng)過長時間的大數(shù)據(jù)分析,得出一個結論——人的最佳如廁時長是 5 秒鐘。所以在該模式下,人們?nèi)鐜埃瑤鶗鶕?jù)等待人數(shù)提前制定出如廁計劃,即為每位等待者分配 5 秒鐘如廁時間。但是有一個規(guī)則:當如廁者提前結束,那么下一個人仍然需要等夠 5 秒鐘;而當如廁者超時以后,待廁者可以在上一人完成時立即如廁。那么:

如廁計劃如下:

  1. 第一個人:第 0 秒進入

  2. 第二個人:第 5 秒進入

  3. 第三個人:第 10 秒進入

  4. 第四個人:第 15 秒進入

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



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


更多獨家精彩內(nèi)容盡在我的新書《Spring Boot趣味實戰(zhàn)課》中。


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

分享到微博請遵守國家法律
衡阳市| 青岛市| 阿拉善盟| 托克托县| 嘉义市| 泸水县| 岗巴县| 炉霍县| 景德镇市| 峨山| 武功县| 郧西县| 台安县| 高密市| 乌拉特前旗| 巫溪县| 邯郸市| 兴和县| 酉阳| 安庆市| 循化| 汕头市| 广丰县| 江津市| 镇宁| 莱州市| 德阳市| 昌平区| 通城县| 邵武市| 泰顺县| 临清市| 长宁县| 资兴市| 黔江区| 长岛县| 湘阴县| 河南省| 临高县| 调兵山市| 普宁市|