java定时器 schedule和scheduleAtFixedRate区别

转自http://wangzjie.iteye.com/blog/621051

schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。

比如

SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  Date d1 = fTime.parse("2005/12/30 14:10:00");
  
  t.scheduleAtFixedRate(new TimerTask(){
   public void run()
   {
       System.out.println("this is task you do6");
   }
  },d1,3*60*1000);

间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,如果我在14:17:00分执行这个程序,那么会立刻打印3次

this is task you do6     //14:10
this is task you do6     //14:13
this is task you do6     //14:16

并且注意,下一次执行是在14:19 而不是 14:20。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。

但是上面如果用schedule方法,间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,那么在14:17:00分执行这个程序,则立即执行程序一次。并且下一次的执行时间是 14:20,而不是从14:10开始算的周期(14:19)。

 

需要注意的是scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果是不同的。上面例子中任务只是打印一个字符串,比较简单。但如果任务比较复杂,或者由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则scheduleAtFixedRate方法将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”;而schedule方法的后续执行也将被延迟。所以,在长期运行中,scheduleAtFixedRate执行的频率将正好是指定周期的倒数,schedule 执行的频率一般要稍慢于指定周期的倒数。

scheduleAtFixedRate 效率总体上高于schedule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
schedulescheduleAtFixedRateJava中用于调度任务的方法,它们的用法有一些区别schedule方法用于在指定的延迟时间后执行一次任务。它的用法是通过调用ScheduledExecutorService对象的schedule方法,并传入一个Runnable对象和延迟时间作为参数。任务将在延迟时间过去后执行一次。 scheduleAtFixedRate方法用于按固定速率执行任务。它的用法是通过调用ScheduledExecutorService对象的scheduleAtFixedRate方法,并传入一个Runnable对象、初始延迟时间和重复执行的间隔时间作为参数。任务将在初始延迟时间过去后开始执行,并且之后每隔一段时间执行一次。 需要注意的是,虽然schedulescheduleAtFixedRate的用法类似,都是通过调用ScheduledExecutorService对象的方法来执行任务,但它们在执行任务的方式上有一些区别schedule方法是在任务完成后才会开始下一个任务的执行,而scheduleAtFixedRate方法是按固定速率执行任务,不管上一个任务是否完成。 更多关于schedulescheduleAtFixedRate的详细用法可以参考[Ling912的博客文章](https://blog.csdn.net/ling912439122/article/details/52712406)。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Timer类中的 scheduleAtFixedRateschedule](https://blog.csdn.net/sinat_41838539/article/details/86483272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Timer定时器学习,scheduleAtFixedRateschedule区别,以及疑问。](https://blog.csdn.net/qq_36841482/article/details/82461585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值