`
javaeyetodj
  • 浏览: 431368 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    Java定时器的使用 Java程序

    本篇文章将深入探讨Java定时器的使用方法和关键概念。 ### 1. Java定时器类介绍 Java定时器类`Timer`和`TimerTask`是配合使用的。`Timer`用于创建定时器实例并调度任务,而`TimerTask`则是一个抽象类,用于定义要...

    Java定时器

    总结来说,Java定时器是Java编程中的一个重要概念,它结合`Timer`和`TimerTask`类可以实现各种定时任务,而在`Swing`环境中,`Swing Timer`提供了更加便捷且线程安全的解决方案。对于Java初学者来说,理解和掌握...

    java定时器设置及停止的方法

    本文将深入探讨如何在Java中设置和停止定时任务,主要关注`java.util.Timer`和`java.util.TimerTask`,以及更现代的`ScheduledExecutorService`。 首先,`java.util.Timer`是一个工具类,它允许程序员安排任务在...

    JAVA中定时器的使用

    需要注意的是,schedule 方法和 scheduleAtFixedRate 方法的区别。在 schedule 方法中,如果指定的开始执行时间在当前系统运行时间之前,schedule 方法不会把过去的时间算上。例如,在上面的代码中,我们使用 ...

    java定时器服务!!

    总结来说,Java定时器服务主要通过`Timer`和`TimerTask`实现,用于计划未来的任务执行。当需求更复杂时,可以转向`ScheduledExecutorService`。在实际编程中,理解这些类的工作原理和使用方式,能帮助我们更好地管理...

    Java创建定时器.rar

    首先,我们来了解Java中的定时器类`java.util.Timer`和`java.util.TimerTask`。`Timer`类用于创建和管理定时任务,而`TimerTask`是所有定时任务的基类,我们需要继承它并重写`run()`方法来定义需要执行的任务。 ...

    java定时器定时调用任务

    总结来说,Java定时器是通过`Timer`和`TimerTask`类实现的,它们提供了基础的定时任务调度功能。在Servlet环境中,我们可以利用监听器或Servlet的初始化方法来整合定时器。然而,对于更复杂的定时需求,建议使用`...

    java定时器.pdf

    Java定时器是Java语言中用于实现定时任务的重要工具,它位于`java.util`包下,通过`Timer`和`TimerTask`两个核心类,我们可以轻松创建和管理定时任务。本文将详细介绍Java定时器的使用方法以及在Web环境中的应用。 ...

    Java定时器Timer简述共8页.pdf.zip

    下面我们将深入探讨Java定时器的主要特性和用法。 1. **创建Timer对象**: 使用new关键字创建一个Timer对象,这是启动定时任务的第一步。例如: ```java Timer timer = new Timer(); ``` 2. **定义TimerTask**...

    Java定时器.pdf

    Java定时器框架主要由`java.util.Timer`和`java.util.TimerTask`组成,这两个类提供了在Java中安排一次性或重复性任务的能力。然而,这个框架存在一定的局限性,例如无法直接处理夏令时变化导致的时间跳跃问题,对于...

    Java后台定时器代码

    Java后台定时器是一种在应用程序运行时执行特定任务的机制,常用于执行周期性的维护操作、数据同步或发送通知等。在Java中,我们可以使用多种方式实现后台定时任务,包括使用`java.util.Timer`类,`java.util....

    java schedule-定时器

    Java定时器(Java Timer)是Java SE平台中的一个强大工具,用于在特定时间间隔执行任务。这个类位于`java.util`包中,提供了调度任务的能力,使得开发者可以安排任务在未来某个时间点或定期执行。在Java中,定时任务...

    java定时器Timer

    Java定时器(Timer)是Java.util包中的一个类,它提供了调度任务的能力,可以在特定的延迟后或定期执行。在Java编程中,我们有时需要在指定时间执行某些操作,例如发送提醒、执行清理任务等,这时候Java Timer就派上...

    java定时器\多线程(池)\java队列Demo

    Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,其中`java定时器`、`多线程(池)`和`java队列`是核心概念。让我们深入探讨这些主题。 ### 1. Java定时器(java.util.Timer) `java.util.Timer` 类允许...

    JAVA定时器word文档

    总结一下,Java定时器(java.util.Timer)和TimerTask配合使用,可以方便地实现定时执行任务的需求。通过结合Servlet监听器,我们可以确保定时器在Web应用启动时启动,并在应用关闭时停止,确保任务的生命周期与Web...

    java多线程和定时器学习

    接下来,我们讨论Java定时器(Timer)。Java `Timer`类提供了一种在后台线程上定期执行任务的能力,这对于计划任务、定时触发事件等场景非常有用。`Timer`类主要包含两个方法:`schedule(TimerTask task, long delay...

Global site tag (gtag.js) - Google Analytics