博客
关于我
java定时器,留着用
阅读量:789 次
发布时间: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/

    你可能感兴趣的文章
    SparkStreaming利用队列生成测试数据源
    查看>>
    js——BOM操作知多少?
    查看>>
    划分子网与NAT的区别。。。
    查看>>
    信号量机制
    查看>>
    接口的私有方法
    查看>>
    钻石操作符使用升级
    查看>>
    设置方法区大小与OOM
    查看>>
    对象的实例化内存布局与访问定位内容
    查看>>
    React + 导入模块的一个错误
    查看>>
    Laravel 直接返回404页面
    查看>>
    PHP 自定义错误与处理
    查看>>
    记一次内部系统渗透测试:小漏洞组合拳
    查看>>
    jquery-resizable使用
    查看>>
    常用元素操作的方法
    查看>>
    命名实体识别数据预处理
    查看>>
    分布式是登录机制是如何实现的。
    查看>>
    零基础学习 Vue3 教程 2021 年最新教程 免费视频教程(4 个视频)
    查看>>
    解决 matplotlib 中文显示乱码的问题
    查看>>
    解决打开 json 文件中文乱码的问题
    查看>>
    计算机网络基础:DHCP服务的部署
    查看>>