博客
关于我
java定时器,留着用
阅读量:790 次
发布时间:2023-01-23

本文共 1199 字,大约阅读时间需要 3 分钟。

在Java中,使用TimerTask来执行定期任务时,需要确保任务在预定的时间点正确启动,并且可以正确处理首次执行时间。如果程序启动时,当前时间已经超过了设定的首次执行时间,则定时器会在下一个周期启动。

为了实现这一点,可以按照以下步骤进行:

  • 导入必要的类

    import java.util.Timer;import java.util.TimerTask;import java.util.Calendar;import java.util.Date;
  • 设置首次执行时间:使用Calendar获取当前时间,并设置为预定的首次执行时间。如果当前时间已经超过了首次执行时间,则将首次执行时间设置为下一个24小时。

    Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int day = calendar.get(Calendar.DAY_OF_MONTH);calendar.set(year, month, day, 9, 0, 0); // 设置为每天9:00:00Date firstTime = new Date(calendar.getTime());Date nowDate = new Date();long interval = firstTime.getTime() - nowDate.getTime();if (interval < 0) {    calendar.add(Calendar.DAY_OF_MONTH, 1);    firstTime = new Date(calendar.getTime());    interval = firstTime.getTime() - nowDate.getTime();}
  • 创建Timer实例并安排任务:使用Timer安排定期任务,首次执行时间为firstTime,间隔为24小时。

    Timer timer = new Timer();long period = 24 * 60 * 60 * 1000L; // 24小时的毫秒数TimerTask task = new TimerTask() {    @Override    public void run() {        //uggested定期任务逻辑    }};timer.schedule(task, firstTime, period);
  • 处理取消定时任务:需要注意,当完成定期任务后,应及时取消Timer实例,以避免资源泄漏。

    // 取消定时任务timer.cancel();
  • 这个设置方法确保了无论程序何时启动,定时任务都能正确地在预定时间执行。

    转载地址:http://kjeyk.baihongyu.com/

    你可能感兴趣的文章
    TreeSet、TreeMap
    查看>>
    JVM内存模型
    查看>>
    可变长度参数
    查看>>
    3、条件查询
    查看>>
    cordova打包apk更改图标
    查看>>
    GitHub上传时,项目在已有文档时直接push出现错误解决方案
    查看>>
    文件系统的层次结构
    查看>>
    vue(渐进式前端框架)
    查看>>
    vscode设置eslint保存文件时自动修复eslint错误
    查看>>
    Remove Extra one 维护前缀最大最小值
    查看>>
    Linux操作系统的安装与使用
    查看>>
    C++ 继承 详解
    查看>>
    OSPF多区域
    查看>>
    Docker入门之-镜像(二)
    查看>>
    重置UAG Application admin密码
    查看>>
    嵌入式系统试题库(CSU)
    查看>>
    setup facatory9.0打包详细教程(含静默安装和卸载)
    查看>>
    java.security.InvalidKeyException: Illegal key size
    查看>>
    Linux kernel pwn --- CSAW2015 StringIPC
    查看>>
    IDEA 找不到 Persistence窗口解决办法
    查看>>