Java 定時器的使用示例
阿新 • • 發佈:2020-09-17
最近要用到定時任務,就是超過48小時的資料給關閉,前臺就不顯示了。還是頭一次使用java的定時器,。。java定時器使用Timer類。有時間得看下原始碼了,看看具體咋弄的。
Timer主要用於Java執行緒裡指定時間或週期執行任務。Timer是執行緒安全的,但不提供實時性(real-time)保證。先看看呼叫timer的幾種方式。
/** * 這個方法是排程一個task,經過2000(ms)後開始進行排程,僅僅排程一次。 */ public static void timer1(){ Timer nTimer = new Timer(); nTimer.schedule(new TimerTask() { @Override public void run() { System.out.println("----設定要指定任務-----"); } },2000); } /** * 在指定的時間點time上排程一次。 */ public static void timer2() { Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("-------延遲5000毫秒,每1000毫秒執行一次--------"); } },time); } /** * 延遲5000毫秒,每1000毫秒執行一次 * 在5000(ms)後開始排程,每次排程完後,最少等待1000(ms)後才開始排程。 */ public static void timer3() { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { System.err.println("-------延遲5000毫秒,每1000毫秒執行一次--------"); } },5000,1000); } /** * 設定17:56執行任務(第一次排程的時間),每過一天執行一次 * 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("-------設定要指定任務--------"); } },time,1000 * 60 * 60 * 24);// 這裡設定將延時每天固定執行 }
以上就是呼叫的幾種方法,再貼下我的程式碼
// 時間間隔(一天) 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(); // 第一次執行定時任務的時間 // 如果第一次執行定時任務的時間 小於當前的時間 // 此時要在 第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。 if (date.before(new Date())) { date = this.addDay(date,1); } new Timer().scheduleAtFixedRate(new TimerTask() { public void run() { Date now = new Date(); //查出所有未關閉資料 List<BankWork> list = bankWorkService.findList(new BankWork().setStatus(Const.DEFAULT_STATUS)); //篩選出超過48小時的未關閉資料 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)); //修改所有未關閉資料為關閉 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; } } // 增加或減少天數 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 定時器的使用示例的詳細內容,更多關於Java 定時器的資料請關注我們其它相關文章!