scheduleAtFixedRate的追赶性(最简单,无需看代码)

本文深入探讨了Java Timer中scheduleAtFixedRate()方法的追赶性特性。通过实例演示,当设定的任务开始时间早于当前时间时,Timer会计算并立即执行在时间差内能完成的任务次数,展现出其追赶性。此外,对比了此方法与Schedule方法在追赶性上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数

scheduleAtFixedRate()方法的参数

  • TimerTask task,执行的任务
  • Date firstTime,第一次执行任务的时间
  • long period,周期时间

直接看运行结果

  • 我设置的任务周期时间为1分钟,即1分钟执行一次

  • 从图中看出任务开始时间当前时间间隔了4分18秒,向上取整为5分钟

  • 任务直接就先跑了5次
    在这里插入图片描述

  • 跑完5次后,才按照我的周期进行一分钟一次任务执行,如图

在这里插入图片描述


总结

(1)追赶性就是如果我们设置任务开始的时间当前时间之前,那么他会计算出两个时间的差,计算出时间差内能够执行任务多少次,然后立即执行。

(2)scheduleAtFixedRate具有追赶性,而Schedule不具有追赶性。


代码

代码放这,看不看都可以

public class Run {
    private static Timer timer = new Timer();
    private static int runCount = 0;

    static public class MyTask1 extends TimerTask {
        @Override
        public void run() {
            try {
                System.out.println("开始!时间为:" + new Date());
                Thread.sleep(2000);
                System.out.println("结束!时间为:" + new Date());
                runCount++;
                System.out.println("=======================================执行完" + runCount + "次");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String args[]) {
        try {
            //新建任务
            MyTask1 task1 = new MyTask1();
            //设置任务开始时间
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateString1 = "2019-4-18 10:30:00";
            Date dateRef1 = format.parse(dateString1);
            //计算出当前时间
            Date d = new Date();
            SimpleDateFormat ft = new SimpleDateFormat("hh:mm:ss");
            System.out.println("自己定义任务开始时间为: 10:30:00,当前时间" + ft.format(d));
            System.out.println("=======================================");
            //开始循环执行任务(周期为1分钟)
            timer.scheduleAtFixedRate(task1, dateRef1, 1000 * 60);
            //timer.schedule(task1,dateRef1,1000*60);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值