Java中scheduleAtFixedRate方法的使用详解

星辰_大海 2024-11-21 09:47:28编程技术
220

在Java编程中,我们常常需要执行一些定时任务,比如定时发送邮件、定时清理缓存、定时统计分析等。Java提供了多种方式来实现定时任务调度,其中最常用的就是Timer类和ScheduledExecutorService类。这两个类都提供了scheduleAtFixedRate方法,用于以固定频率执行指定任务。本文将详细介绍scheduleAtFixedRate方法的使用方法和注意事项,帮助您更好地掌握这一强大的定时任务调度工具。

编程,程序开发.webp

scheduleAtFixedRate(task,time,period)

task-所要安排的任务 time-首次执行任务的时间 period-执行一次task的时间间隔,单位毫秒

作用:时间等于或超过time首次执行task,之后每隔period毫秒重复执行task

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println("Current Time:"+format.format(calendar.getTime()));//获取当前系统时间
        System.out.println("NO.1");
    }
    public static void main(String[] args) {
        MyTimerTask task = new MyTimerTask();
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println(format.format(calendar.getTime()));
        calendar.add(Calendar.SECOND,3);//获取距离当前时间3秒后的时间
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
    }
}

scheduleAtFixedRate(task, delay,period)

task-所要执行的任务 delay-执行任务的延迟时间,单位毫秒 period-执行一次task的时间间隔

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println("Current Time:"+format.format(calendar.getTime()));//获取当前系统时间
        System.out.println("NO.1");
    }
    public static void main(String[] args) {
        MyTimerTask task = new MyTimerTask();
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
        System.out.println(format.format(calendar.getTime()));
        calendar.add(Calendar.SECOND,3);//获取距离当前时间3秒后的时间
        Timer timer = new Timer();
        //timer.scheduleAtFixedRate(task,calendar.getTime(),2000);
        timer.scheduleAtFixedRate(task,1000,2000);
    }
}

scheduleAtFixedRate和scheduleWithFixedDelay的区别

 1)scheduleAtFixedRate:可以传入runnable,定制第一次的初始化执行时间,周期时间,单位时间-------创建并执行一个周期性任务,过了给定的初始延迟时间(1min执行一次or其他时间),会第一次被执行。执行过程中发生异常,任务停止。

2)scheduleWithFixedDelay:和上一种相类似-----创建并执行周期性任务,第一次执行及异常情况

A:1s中执行一个任务,每个任务执行时间500ms====两种无区别

B:执行任务时间过长,如间隔时间是1s,而执行时间3s====该情况下有区别,主要在周期时间的区别

scheduleWithFixedDelay该方法中一次任务执行时长超过周期时间,下一次任务会在该次任务执行结束时间基础上,计算执行延时(举例子:如间隔时间是1s,而执行时间3s,当前10:03时触发执行,理论而言,10:04时应当执行新任务,但通过该方法执行,执行结束时为10:06,在10:06的基础上延迟1s执行新任务)

scheduleAtFixedRate该方法(举例子:如间隔时间是1s,而执行时间3s,当前10:03时触发执行,10:06执行结束,10:04及10:05累积的任务会立刻执行,而非在10:06的基础上增加延时时间)

总结

通过本文的详细讲解,我们了解了Java中scheduleAtFixedRate方法的使用方法和注意事项。掌握了这些知识后,您将能够更加灵活地进行定时任务调度,从而提升程序的自动化程度和运行效率。希望本文的内容对您有所帮助,并能为您的Java编程实践提供有价值的参考。如果您有任何疑问或需要进一步的指导,请随时留言,我们将竭诚为您解答。感谢您的阅读,期待您的进步与成长!

Java scheduleAtFixedRate
THE END
蜜芽
故事不长,也不难讲,四字概括,毫无意义。

相关推荐

JavaScript中forEach的几种用法详解
在处理数组时,JavaScript 提供了许多内置方法,其中 forEach 是最常用的方法之一。forEach 方法为数组中的每个元素执行一次提供的函数,使得遍历数组变得简单而高效。本文将...
2025-01-17 编程技术
124

Java中UUID五个版本的区别及使用场景详解
在现代软件开发中,生成唯一标识符是一个常见的需求,尤其是在分布式系统和多用户环境中。Java提供了java.util.UUID类,支持五种不同版本的UUID(Universally Unique Identifi...
2025-01-16 编程技术
126

Java 中 UUID 和 雪花算法的生成及应用场景详解
在分布式系统和大规模应用中,唯一标识符的生成是一个至关重要的问题。Java 提供了多种生成唯一标识符的方法,其中UUID(Universally Unique Identifier)和雪花算法(Snowflake...
2025-01-16 编程技术
131

Java出现NoSuchMethodException异常的原因及解决方案详解
在 Java 开发过程中,NoSuchMethodException 是一个常见的异常,通常发生在反射(Reflection)操作中。当程序试图调用一个不存在的方法时,就会抛出这个异常。本文将详细探讨 N...
2025-01-10 编程技术
145

Java开发中ArrayList和Vector的区别详解
在 Java 开发中,ArrayList 和 Vector 是两个常用的列表类(List)。虽然它们都实现了 List 接口,但在内部实现和性能表现上却有着显著的区别。本文将详细解析 ArrayList 和 Ve...
2025-01-09 编程技术
142

Java开发中实现字符串替换的三种方法示例详解
在Java开发中,字符串替换是一项常见的操作,用于修改字符串中的特定部分以满足需求。Java提供了多种字符串替换方法,每种方法都有其特点和适用场景。本文ZHANID工具网将详细...
2025-01-08 编程技术
166