Java 定时器的使用示例

 更新时间:2020年09月17日 09:45:50   作者:ZJ  
这篇文章主要介绍了Java 定时器的使用,帮助大家更好的理解和使用Java time类,感兴趣的朋友可以了解下

最近要用到定时任务,就是超过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 定时器的资料请关注脚本之家其它相关文章!

相关文章

  • 几种常见的Java运行时异常小结

    几种常见的Java运行时异常小结

    在Java编程语言中异常处理是一项关键的机制,它帮助开发者识别和修复程序运行时可能出现的问题,下面这篇文章主要给大家介绍了几种常见的Java运行时异常的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • Java中如何取出String字符串括号中的内容

    Java中如何取出String字符串括号中的内容

    这篇文章主要介绍了Java中如何取出String字符串括号中的内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 关于MybatisPlus配置双数据库驱动连接数据库问题

    关于MybatisPlus配置双数据库驱动连接数据库问题

    这篇文章主要介绍了MybatisPlus配置双数据库驱动连接数据库的具体实现,具体的业务逻辑,在service层的类或者方法上面添加@DataSource注解来指定该业务需要用到的数据源,需要的朋友可以参考下
    2022-01-01
  • 轻松掌握Java代理模式

    轻松掌握Java代理模式

    这篇文章主要帮助大家轻松掌握Java代理模式,什么是静态代理?感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 解决idea 通过build project 手动触发热部署失败的问题

    解决idea 通过build project 手动触发热部署失败的问题

    在debug运行项目的过程中,并且保证(不添加方法,不修改方法名)一定的规则的情况下,可以通过build project 来手动热部署项目,本文给大家介绍解决idea 通过build project 手动触发热部署失败的问题,感兴趣的朋友一起看看吧
    2023-12-12
  • 关于Java变量的声明、内存分配及初始化详解

    关于Java变量的声明、内存分配及初始化详解

    下面小编就为大家带来一篇关于Java变量的声明、内存分配及初始化详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Springboot项目Aop与拦截器与过滤器横向对比

    Springboot项目Aop与拦截器与过滤器横向对比

    前三篇文章已经介绍过Springboot项目如何实现Aop,拦截器和过滤齐功能,这篇文章主要介绍三者的横向对比,本文有一定的参考价值,感兴趣的小伙伴可以参考阅读
    2023-03-03
  • Java 泛型有哪些好处详解

    Java 泛型有哪些好处详解

    这篇文章主要介绍了 Java 泛型有哪些好处详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java毕业设计实战项目之仓库管理系统的实现流程

    Java毕业设计实战项目之仓库管理系统的实现流程

    这是一个使用了java+SSM+Maven+Bootstrap+mysql开发的仓库管理系统,是一个毕业设计的实战练习,具有一个仓库管理系统该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • SpringMVC使用注解实现登录功能

    SpringMVC使用注解实现登录功能

    这篇文章主要为大家详细介绍了SpringMVC使用注解实现登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论