Java 定時器的使用示例
最近要用到定時任務(wù),就是超過48小時的數(shù)據(jù)給關(guān)閉,前臺就不顯示了。還是頭一次使用java的定時器,。。java定時器使用Timer類。有時間得看下源碼了,看看具體咋弄的。
Timer主要用于Java線程里指定時間或周期運行任務(wù)。Timer是線程安全的,但不提供實時性(real-time)保證。先看看調(diào)用timer的幾種方式。
/** * 這個方法是調(diào)度一個task,經(jīng)過2000(ms)后開始進行調(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); } /** * 在指定的時間點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)后開始調(diào)度,每次調(diào)度完后,最少等待1000(ms)后才開始調(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)度的時間),每過一天執(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è)定將延時每天固定執(zhí)行 }
以上就是調(diào)用的幾種方法,再貼下我的代碼
// 時間間隔(一天) long periodDay = 24 * 60 * 60 * 1000; Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 1); // 凌晨1點 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); // 第一次執(zhí)行定時任務(wù)的時間 // 如果第一次執(zhí)行定時任務(wù)的時間 小于當(dāng)前的時間 // 此時要在 第一次執(zhí)行定時任務(wù)的時間加一天,以便此任務(wù)在下個時間點執(zhí)行。如果不加一天,任務(wù)會立即執(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)); //篩選出超過48小時的未關(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); // 判斷時間是否超過48小時 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 定時器的使用示例的詳細內(nèi)容,更多關(guān)于Java 定時器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
搭建Spring MVC和Vue3的應(yīng)用程序的實現(xiàn)
本文主要介紹了搭建Spring MVC和Vue3的應(yīng)用程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11SpringMVC中Controller類數(shù)據(jù)響應(yīng)的方法
這篇文章主要介紹了SpringMVC中的數(shù)據(jù)響應(yīng)的問題,主要來了解 Controller 類如何進行數(shù)據(jù)響應(yīng)的,本文給大家介紹的非常詳細,需要的朋友可以參考下2021-07-07Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn)
這篇文章主要介紹了Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java Spring分別實現(xiàn)定時任務(wù)方法
這篇文章主要為大家詳細介紹了Java與Spring設(shè)置動態(tài)定時任務(wù)的方法,定時任務(wù)的應(yīng)用場景十分廣泛,如定時清理文件、定時生成報表、定時數(shù)據(jù)同步備份等2022-07-07OpenTelemetry初識及調(diào)用鏈Trace詳解
這篇文章主要為為大家介紹了OpenTelemetry初識及調(diào)用鏈Trace詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12IntelliJ?IDEA?2021.3永久最新激活至2099年(親測有效)
最新版idea2021.3已出來,很多網(wǎng)友迫不及待的要升級idea2021最新版,今天小編抽空給大家整理了一篇教程關(guān)于idea2021.3最新激活教程,本文以idea2021.2.3為例通過圖文并茂的形式給大家分享激活詳細過程,感興趣的朋友參考下吧2020-12-12