|  | 最近要用到定时任务,就是超过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();
 
 }
 | 
 ————————————————
 原文链接:https://blog.csdn.net/sunon_/article/details/90634654
 
 
 程序猿的技术大观园:www.javathinker.net
 |  |