栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 定时器的使用示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 定时器的使用示例

最近要用到定时任务,就是超过48小时的数据给关闭,前台就不显示了。还是头一次使用java的定时器,。。java定时器使用Timer类。有时间得看下源码了,看看具体咋弄的。

Timer主要用于Java线程里指定时间或周期运行任务。Timer是线程安全的,但不提供实时性(real-time)保证。先看看调用timer的几种方式。

  
  public static void timer1(){
    Timer nTimer = new Timer();
    nTimer.schedule(new TimerTask() {
      @Override
      public void run() {
 System.out.println("----设定要指定任务-----");
      }
    },2000);
  }
 
  
  public static void timer2() {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
      public void run() {
 System.out.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
      }
    }, time);
  }
 
  
  public static void timer3() {
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
 System.err.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
      }
    }, 5000, 1000);
  }
  
  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 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 定时器的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/131726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号