`

scheduleAtFixedRate和schedule的区别

阅读更多

import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;

/**
 * @author gaoqi
 */

public class TimerTest {

 public static void main(String[] args) {
  Timer t = new Timer();
  
  //在5秒之后执行TimerTask的任务
  t.schedule(new TimerTask(){
     public void run()
     {System.out.println("this is task you do1");}
    },5*1000);


  //在Date指定的特定时刻之后执行TimerTask的任务
  Date d1 = new Date(System.currentTimeMillis()+1000);
  t.schedule(new TimerTask(){
   public void run()
   {System.out.println("this is task you do2");}
  },d1);


  //在Date指定的特定时刻之后,每隔1秒执行TimerTask的任务一次
  Date d2 = new Date(System.currentTimeMillis()+1000);
  t.schedule(new TimerTask(){
   public void run()
   {System.out.println("this is task you do3");}
  },d2,1*1000);


  //在3秒之后,每隔1秒执行TimerTask的任务一次
  t.schedule(new TimerTask(){
   public void run()
   {System.out.println("this is task you do4");}
  },3*1000,1*1000);
  
  //在3秒之后,绝对每隔2秒执行TimerTask的任务一次

  t.scheduleAtFixedRate(new TimerTask(){
   public void run()
   {System.out.println("this is task you do6");}
  },3*1000,2*1000);
 }

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)。


}

分享到:
评论

相关推荐

    java中timer的schedule和scheduleAtFixedRate方法区别详解

    Java 中 Timer 的 schedule 和 scheduleAtFixedRate 方法区别详解 Java 中的 Timer 类提供了两个常用的方法:schedule 和 scheduleAtFixedRate,用于安排和执行定时任务。虽然这两个方法看起来很相似,但是它们之间...

    Java Timer:schedule和scheduleAtFixedRate

    本篇文章将深入探讨 `Timer` 类的两个核心方法:`schedule` 和 `scheduleAtFixedRate`,以及它们在实际开发中的应用。 首先,`schedule` 方法有两种重载形式,一种是安排一个 `TimerTask` 在特定的延迟后执行,另一...

    Java定时任务schedule和scheduleAtFixedRate的异同

    该接口提供了两个方法,`schedule`和`scheduleAtFixedRate`,它们都能用于安排任务的执行,但具体的行为有所不同。本文将深入探讨这两个方法的异同。 1. **schedule方法** `schedule`方法用于一次性延迟执行任务,...

    java Schedule

    通过`ScheduledExecutorService`,你可以使用`schedule()`, `scheduleAtFixedRate()`, 和 `scheduleWithFixedDelay()` 方法来安排一次性任务和周期性任务,并且这些任务会在单独的工作线程中执行,互不影响。...

    java schedule

    `ScheduledExecutorService`提供了一组用于延迟执行或定期执行任务的方法,如`schedule()`, `scheduleAtFixedRate()`, 和 `scheduleWithFixedDelay()`。`ScheduledThreadPoolExecutor`是实现`...

    定时器框架schedule

    在本案例中,我们关注的是一个名为"schedule"的项目,它似乎使用了org.tiling.scheduling.*这一命名空间下的类和方法。下面将深入探讨定时器框架的相关知识点。 1. **定时器的概念** 定时器是编程中的一个概念,...

    java schedule-定时器

    3. **调度任务**:使用`schedule()`或`scheduleAtFixedRate()`方法来安排任务执行。`schedule()`方法用于单次执行,而`scheduleAtFixedRate()`则用于定期执行。例如,如果你想要每天的凌晨1点执行任务,可以这样设置...

    java timer定时器详解(附详细代码)

    Timer类有两种执行任务的模式:schedule和scheduleAtFixedRate。schedule模式可以在某个时间或固定的时间延迟后执行任务,而scheduleAtFixedRate模式可以让任务在固定的频率下运行。 schedule模式的使用方法如下所...

    JAVA中定时器的使用

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

    几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA并发】.docx

    在主程序中,我们可以通过Timer的schedule()或scheduleAtFixedRate()方法来安排任务执行: ```java Timer timer = new Timer(); timer.schedule(new FileStatusChecker(fileName), initialDelay, period); ``` ...

    Java 中Timer和TimerTask 定时器和定时任务使用的例子

    在这个示例中,我们创建了两个 TimerTask 对象 myTask1 和 myTask2,并使用 schedule 和 scheduleAtFixedRate 方法来执行任务。myTask1 将在 1 秒后执行,每隔 2 秒执行一次,而 myTask2 将在 2 秒后开始执行,每隔 ...

    Java定时任务的三种实现方式

    值得注意的是,scheduleAtFixedRate和schedule方法的区别在于,前者保证了固定的执行间隔,而后者保证了固定的延迟时间,这在处理可能出现的执行延迟时会有不同表现。 接下来,ScheduledExecutorService是Java并...

    ScheduledExecutorService 计时器任务处理

    3. `scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)`: 类似于`scheduleAtFixedRate`,但区别在于两次任务执行之间的时间间隔是上一次任务结束到下一次任务开始的时间,而...

    TimingTrigger

    `Timer`类提供了`schedule()`和`scheduleAtFixedRate()`等方法,用于安排任务的执行。`schedule()`方法用于单次或重复执行任务,而`scheduleAtFixedRate()`则确保任务按固定的频率执行,即使上一次执行超时也会立即...

    java 计时器

    - **安排任务**: 使用`Timer`的`schedule()`或`scheduleAtFixedRate()`方法安排任务的执行。 - **控制任务**: 可以随时调用`TimerTask`的`cancel()`方法取消任务,或者使用`Timer`的`cancel()`方法取消整个`Timer`...

    java实现定时器代码

    创建一个`Timer`对象后,我们可以通过调用其`schedule()`或`scheduleAtFixedRate()`方法来安排任务执行。 `TimerTask`是代表要定时执行的任务的抽象类,你需要创建它的子类并覆盖`run()`方法,定义任务的具体行为。...

    java_clock.rar_Java 闹钟代码_闹钟

    `Timer`类提供了`schedule()`和`scheduleAtFixedRate()`方法来安排任务的执行,而`ScheduledExecutorService`则提供了`schedule()`, `scheduleAtFixedRate()`, 和 `scheduleWithFixedDelay()`方法,具有更灵活的定时...

    Java线程池.docx

    Java线程池是Java语言中的一种高级多线程处理机制,用于避免重复创建和销毁线程而导致额外的性能开销。Java线程池功能可以实现线程的复用,提高了系统的性能和效率。 Java线程池分类 Java线程池可以分为四种类型:...

    远程获取网页数据并分析

    这两个方法的主要区别在于`scheduleAtFixedRate()`会保证两次任务执行之间的间隔固定,即使上一次任务执行超时,而`schedule()`则只保证下一次任务在指定时间开始,不考虑前一次任务的执行时间。 接着是`TimerTask`...

Global site tag (gtag.js) - Google Analytics