Scheduled如何會在上次任務執(zhí)行完才會執(zhí)行下次任務
Scheduled會在上次任務執(zhí)行完才會執(zhí)行下次任務
在使用spring的Scheduled定時任務
擔心同一任務,
第一次開始未執(zhí)行完就執(zhí)行第二次任務,所以給加了synchronized,
但是后面經(jīng)過測試Scheduled定時任務會在上次任務結(jié)束時再執(zhí)行第二次任務,
如果第二次任務堵在哪里了,時間會順延
package xyz.hashdog.job;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author th
* @description: 定時任務測試
* @projectName hashdog-ds
* @date 2020/2/1223:07
*/
@Component
@Slf4j
@AllArgsConstructor
public class TestCrontab {
private static final Object KEY = new Object();
private static boolean taskFlag = false;
@Scheduled(cron = "*/5 * * * * ?")
public void pushCancel() {
System.out.println("進來了");
synchronized (KEY) {
if (TestCrontab.taskFlag) {
System.out.println("測試調(diào)度已經(jīng)啟動");
log.warn("測試調(diào)度已經(jīng)啟動");
return;
}
TestCrontab.taskFlag = true;
}
try {
for (int i =0;i<=10;i++){
System.out.println("執(zhí)行:"+i);
Thread.sleep(2000);
}
} catch (Exception e) {
log.error("測試調(diào)度執(zhí)行出錯", e);
}
TestCrontab.taskFlag = false;
log.warn("測試調(diào)度執(zhí)行完成");
}
}注釋掉synchronized
執(zhí)行效果一樣,并沒有線程安全問題
package xyz.hashdog.job;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @author th
* @description: 定時任務測試
* @projectName hashdog-ds
* @date 2020/2/1223:07
*/
@Component
@Slf4j
@AllArgsConstructor
public class TestCrontab {
private static final Object KEY = new Object();
private static boolean taskFlag = false;
@Scheduled(cron = "*/5 * * * * ?")
public void pushCancel() throws InterruptedException {
System.out.println("進來了");
// synchronized (KEY) {
// if (TestCrontab.taskFlag) {
// System.out.println("測試調(diào)度已經(jīng)啟動");
// log.warn("測試調(diào)度已經(jīng)啟動");
// return;
// }
// TestCrontab.taskFlag = true;
// }
//
// try {
for (int i =0;i<=10;i++){
System.out.println("執(zhí)行:"+i);
Thread.sleep(2000);
}
// } catch (Exception e) {
// log.error("測試調(diào)度執(zhí)行出錯", e);
// }
//
// TestCrontab.taskFlag = false;
log.warn("測試調(diào)度執(zhí)行完成");
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在IDEA中添加jar包到External Libraries庫的實現(xiàn)
這篇文章主要介紹了在IDEA中添加jar包到External Libraries庫的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2026-03-03
Spring數(shù)據(jù)源及配置文件數(shù)據(jù)加密實現(xiàn)過程詳解
這篇文章主要介紹了Spring數(shù)據(jù)源及配置文件數(shù)據(jù)加密實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05
使用Java實現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF
這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-12-12
java數(shù)據(jù)結(jié)構(gòu)和算法中哈希表知識點詳解
在本篇文章里小編給大家分享了關(guān)于java數(shù)據(jù)結(jié)構(gòu)和算法中哈希表的相關(guān)知識點內(nèi)容,需要的朋友們學習下。2019-06-06
使用Rhino讓java執(zhí)行javascript的方法實例
這篇文章主要介紹了java使用Rhino執(zhí)行javascript的方法,Rhino由Mozilla開發(fā),是 JavaScript 一種基于Java的實現(xiàn)2013-12-12
淺談BeanPostProcessor加載次序及其對Bean造成的影響分析
這篇文章主要介紹了淺談BeanPostProcessor加載次序及其對Bean造成的影響分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04

