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 定时器的资料请关注脚本之家其它相关文章!

相关文章

  • 搭建Spring MVC和Vue3的应用程序的实现

    搭建Spring MVC和Vue3的应用程序的实现

    本文主要介绍了搭建Spring MVC和Vue3的应用程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • SpringMVC中Controller类数据响应的方法

    SpringMVC中Controller类数据响应的方法

    这篇文章主要介绍了SpringMVC中的数据响应的问题,主要来了解 Controller 类如何进行数据响应的,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • 到底如何设置Java线程池的大小的方法示例

    到底如何设置Java线程池的大小的方法示例

    在我们日常业务开发过程中,或多或少都会用到并发的功能。那么并发线程池到底设置多大呢?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java键值对Pair的使用方式和操作实现

    Java键值对Pair的使用方式和操作实现

    键值对是一种常见的数据结构,它由一个唯一的键和与之关联的值组成,本文就来介绍一下Java键值对Pair的使用方式和操作实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Mybatis-Plus自动填充更新操作相关字段的实现

    Mybatis-Plus自动填充更新操作相关字段的实现

    这篇文章主要介绍了Mybatis-Plus自动填充更新操作相关字段的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java Spring分别实现定时任务方法

    Java Spring分别实现定时任务方法

    这篇文章主要为大家详细介绍了Java与Spring设置动态定时任务的方法,定时任务的应用场景十分广泛,如定时清理文件、定时生成报表、定时数据同步备份等
    2022-07-07
  • OpenTelemetry初识及调用链Trace详解

    OpenTelemetry初识及调用链Trace详解

    这篇文章主要为为大家介绍了OpenTelemetry初识及调用链Trace详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • IntelliJ IDEA 2021.3永久最新激活至2099年(亲测有效)

    IntelliJ IDEA 2021.3永久最新激活至2099年(亲测有效)

    最新版idea2021.3已出来,很多网友迫不及待的要升级idea2021最新版,今天小编抽空给大家整理了一篇教程关于idea2021.3最新激活教程,本文以idea2021.2.3为例通过图文并茂的形式给大家分享激活详细过程,感兴趣的朋友参考下吧
    2020-12-12
  • Java实现冒泡排序示例介绍

    Java实现冒泡排序示例介绍

    冒泡排序是一种简单的排序算法,通过不断比较相邻两个元素的大小,将较大的元素向后移动,最终将最大的元素放到了数组的末尾。Java中的实现方式是通过嵌套两层循环,外层循环控制比较的次数,内层循环控制每次比较时相邻元素的比较和交换
    2023-04-04
  • IDEA 错误之找不到或无法加载主类的问题

    IDEA 错误之找不到或无法加载主类的问题

    这篇文章主要介绍了IDEA 错误之找不到或无法加载主类,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论