Java 定時(shí)器的使用示例
最近要用到定時(shí)任務(wù),就是超過(guò)48小時(shí)的數(shù)據(jù)給關(guān)閉,前臺(tái)就不顯示了。還是頭一次使用java的定時(shí)器,。。java定時(shí)器使用Timer類。有時(shí)間得看下源碼了,看看具體咋弄的。
Timer主要用于Java線程里指定時(shí)間或周期運(yùn)行任務(wù)。Timer是線程安全的,但不提供實(shí)時(shí)性(real-time)保證。先看看調(diào)用timer的幾種方式。
/**
* 這個(gè)方法是調(diào)度一個(gè)task,經(jīng)過(guò)2000(ms)后開(kāi)始進(jìn)行調(diào)度,僅僅調(diào)度一次。
*/
public static void timer1(){
Timer nTimer = new Timer();
nTimer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("----設(shè)定要指定任務(wù)-----");
}
},2000);
}
/**
* 在指定的時(shí)間點(diǎn)time上調(diào)度一次。
*/
public static void timer2() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("-------延遲5000毫秒,每1000毫秒執(zhí)行一次--------");
}
}, time);
}
/**
* 延遲5000毫秒,每1000毫秒執(zhí)行一次
* 在5000(ms)后開(kāi)始調(diào)度,每次調(diào)度完后,最少等待1000(ms)后才開(kāi)始調(diào)度。
*/
public static void timer3() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.err.println("-------延遲5000毫秒,每1000毫秒執(zhí)行一次--------");
}
}, 5000, 1000);
}
/**
* 設(shè)置17:56執(zhí)行任務(wù)(第一次調(diào)度的時(shí)間),每過(guò)一天執(zhí)行一次
* java.util.Timer.scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
*/
public static void timer4() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 26);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("-------設(shè)定要指定任務(wù)--------");
}
}, time, 1000 * 60 * 60 * 24);// 這里設(shè)定將延時(shí)每天固定執(zhí)行
}
以上就是調(diào)用的幾種方法,再貼下我的代碼
// 時(shí)間間隔(一天)
long periodDay = 24 * 60 * 60 * 1000;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1); // 凌晨1點(diǎn)
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime(); // 第一次執(zhí)行定時(shí)任務(wù)的時(shí)間
// 如果第一次執(zhí)行定時(shí)任務(wù)的時(shí)間 小于當(dāng)前的時(shí)間
// 此時(shí)要在 第一次執(zhí)行定時(shí)任務(wù)的時(shí)間加一天,以便此任務(wù)在下個(gè)時(shí)間點(diǎn)執(zhí)行。如果不加一天,任務(wù)會(huì)立即執(zhí)行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
new Timer().scheduleAtFixedRate(new TimerTask() {
public void run() {
Date now = new Date();
//查出所有未關(guān)閉數(shù)據(jù)
List<BankWork> list = bankWorkService.findList(new BankWork().setStatus(Const.DEFAULT_STATUS));
//篩選出超過(guò)48小時(shí)的未關(guān)閉數(shù)據(jù)
list = list.stream().filter(e -> {
try {
return judgmentDate(e.getModifiedTime(), now);
} catch (Exception e1) {
e1.printStackTrace();
}
return false;
}).collect(Collectors.toList());
list.forEach(e -> e.setStatus(Const.BANK_WORK_STATUS_OK).setModifiedTime(now));
//修改所有未關(guān)閉數(shù)據(jù)為關(guān)閉
bankWorkService.updateAsGroup(list);
}
}, date, periodDay);
// 判斷時(shí)間是否超過(guò)48小時(shí)
private static boolean judgmentDate(Date date1, Date date2) throws Exception {
long cha = date2.getTime() - date1.getTime();
if (cha < 0) {
return false;
}
double result = cha * 1.0 / (1000 * 60 * 60);
if (result <= 48) {
return true;
} else {
return false;
}
}
// 增加或減少天數(shù)
private Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
以上就是Java 定時(shí)器的使用示例的詳細(xì)內(nèi)容,更多關(guān)于Java 定時(shí)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn)
本文主要介紹了搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
SpringMVC中Controller類數(shù)據(jù)響應(yīng)的方法
這篇文章主要介紹了SpringMVC中的數(shù)據(jù)響應(yīng)的問(wèn)題,主要來(lái)了解 Controller 類如何進(jìn)行數(shù)據(jù)響應(yīng)的,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07
Java鍵值對(duì)Pair的使用方式和操作實(shí)現(xiàn)
鍵值對(duì)是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它由一個(gè)唯一的鍵和與之關(guān)聯(lián)的值組成,本文就來(lái)介紹一下Java鍵值對(duì)Pair的使用方式和操作實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)
這篇文章主要介紹了Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java Spring分別實(shí)現(xiàn)定時(shí)任務(wù)方法
這篇文章主要為大家詳細(xì)介紹了Java與Spring設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法,定時(shí)任務(wù)的應(yīng)用場(chǎng)景十分廣泛,如定時(shí)清理文件、定時(shí)生成報(bào)表、定時(shí)數(shù)據(jù)同步備份等2022-07-07
OpenTelemetry初識(shí)及調(diào)用鏈Trace詳解
這篇文章主要為為大家介紹了OpenTelemetry初識(shí)及調(diào)用鏈Trace詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
IntelliJ?IDEA?2021.3永久最新激活至2099年(親測(cè)有效)
最新版idea2021.3已出來(lái),很多網(wǎng)友迫不及待的要升級(jí)idea2021最新版,今天小編抽空給大家整理了一篇教程關(guān)于idea2021.3最新激活教程,本文以idea2021.2.3為例通過(guò)圖文并茂的形式給大家分享激活詳細(xì)過(guò)程,感興趣的朋友參考下吧2020-12-12
IDEA 錯(cuò)誤之找不到或無(wú)法加載主類的問(wèn)題
這篇文章主要介紹了IDEA 錯(cuò)誤之找不到或無(wú)法加載主類,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

