在Java编程中,我们常常需要执行一些定时任务,比如定时发送邮件、定时清理缓存、定时统计分析等。Java提供了多种方式来实现定时任务调度,其中最常用的就是Timer类和ScheduledExecutorService类。这两个类都提供了scheduleAtFixedRate方法,用于以固定频率执行指定任务。本文将详细介绍scheduleAtFixedRate方法的使用方法和注意事项,帮助您更好地掌握这一强大的定时任务调度工具。
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编程实践提供有价值的参考。如果您有任何疑问或需要进一步的指导,请随时留言,我们将竭诚为您解答。感谢您的阅读,期待您的进步与成长!
本文来源于#星辰_大海,由@蜜芽 整理发布。如若内容造成侵权/违法违规/事实不符,请联系本站客服处理!
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/2364.html