时间:2021-05-20
最近要用到定时任务,就是超过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 定时器的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
原生的Java定时器使用Java.util包下的定时器也很简单,具体代码如下://设置定时器开始时间Datetime=sdf.parse("2020-10-01
在实际应用中,我们经常需要使用定时器去触发一些事件。Python中通过线程实现定时器timer,其使用非常简单。看示例:importthreadingdeffu
定时器的三种类型是: 1、接通延时型定时器:接通延时型定时器是各种PLC中最常见最基本的定时器,这种定时器在SIEMENS的PLC中,称为SD型定时器。 2
本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理。分享给大家供大家参考。具体分析如下:Timer类:设置一个定时器,定时执行用户指定的函数。定时器启
javascript定时器取消定时器及js定时器优化方法通常用的方法:启动定时器:window.setInterval(Method,Time)Method是定