0 0

关于Timer的schedule和scheduleAtFixedRate方法的区别0

网上的解释都很清楚,schedule表示下一次的执行时间点=上一次程序执行完成的时间点+间隔时间。
scheduleAtFixedRate表示下一次的执行时间点=上一次程序开始执行的时间点+间隔时间。
但是当我自己测试的时候发现结果不是这样的,代码这样:
Timer time = new Timer();
    time.schedule( new TimerTask(){

      @Override
      public void run() {
        // TODO Auto-generated method stub
        try {
          Thread.sleep(3000);
        } catch ( InterruptedException e ) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } 
        System.out.println(new Date().getTime());
      }
     
    },0,2*1000 );
  }
结果是1417505877443
1417505880443
1417505883443
1417505886443
1417505889443
每隔3秒一次,如果按照网上说的,1417505877443表示第一个执行完了,这个时候要等到1417505879443开始执行第二次任务,在sleep3秒就是要到1417505882443才输出啊,我觉得理论上应该每隔5秒输出一次。
又试验了scheduleAtFixedRate也是每隔3秒输出一次,如果按照网上说的理论上应该每隔2秒输出一次啊
求指教
2014年12月02日 15:47

1个答案 按时间排序 按投票排序

0 0

schedule和sleep走时间是同时的,schedule的2秒已经走完了,但sleep的3秒还没走完,当sleep的时间走完时schedule就直接运行了,不会再等2秒了,比如下面的例子(用你的代码修改的):

	Timer time = new Timer(); 
    time.schedule( new TimerTask(){
      public void run() { 
    	  System.out.println("开始"+new Date().getTime());
        try { 
          Thread.sleep(1000); 
        } catch ( InterruptedException e ) { 
          e.printStackTrace(); 
        }  
        System.out.println("结束"+new Date().getTime()); 
      } 
      
    },0 ,2*1000 ); 
  

运行结果是这样的:
开始1418519390115
结束1418519391129
开始1418519392129
结束1418519393143
scheduleAtFixedRate同理。

2014年12月14日 09:11

相关推荐

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

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

    Java Timer:schedule和scheduleAtFixedRate

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

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

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

    Timer定时器的使用方法

    3. 计划任务:使用 `schedule()` 或 `scheduleAtFixedRate()` 方法来安排 `TimerTask` 的执行。前者按指定延迟后首次执行,然后每次间隔指定的时间执行;后者则保证两次执行之间的间隔固定,即使上一次执行超时也...

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

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

    Timer和TimerTask的使用

    ### Timer和TimerTask的使用详解 #### 一、引言 `Timer` 和 `TimerTask` 是Java中用于实现定时任务的重要工具。它们提供了一种简单有效的方式来安排任务的执行,既可以一次性执行也可以周期性地执行。这对于实现...

    简单的timer例子

    接下来,我们可以使用`Timer`的`schedule()`方法来安排任务的执行。例如,如果你想在特定延迟后执行一次任务,可以这样操作: ```java Timer timer = new Timer(); timer.schedule(new MyTask(), 5000); // 延迟5秒...

    timer写的任务池

    要将`TimerTask`添加到任务池并设定执行时间,可以使用`Timer`的`schedule()`或`scheduleAtFixedRate()`方法。前者用于一次性或间隔性的任务,而后者则用于定期执行任务,即使前一次执行超时也会继续执行下一次。 ...

    android中timer的使用

    此外,`Timer`任务调度是非阻塞的,这意味着`schedule()`方法会立即返回,不会等待任务执行完毕。 `Timer`类还有几个重要的方法: 1. `cancel()`:取消`Timer`,停止所有计划但尚未开始的任务。 2. `purge()`:清除...

    Alert和Timer编程范例

    它包含两个核心方法:schedule(TimerTask task, long delay)和scheduleAtFixedRate(TimerTask task, long initialDelay, long period)。前者在指定延迟后首次执行任务,而后者则会按固定的间隔重复执行任务。 ...

    java定时任务调度之Timer 简单示例

    创建一个`Timer`对象后,你可以使用`schedule()`或`scheduleAtFixedRate()`方法来安排任务。`schedule()`方法用于单次延迟执行,而`scheduleAtFixedRate()`方法则用于周期性地执行任务。 下面是一个使用`Timer`类...

    JavaTimer和TimerTask实例教程Java开发

    当你调用`Timer`的`schedule`或`scheduleAtFixedRate`方法时,任务会被添加到内部的任务队列中,并在指定的时间由`Timer`的后台线程执行。`Timer`实例一旦创建,就会持续运行,直到所有的任务都执行完毕,或者通过...

    Java时间类库Timer的使用方法与实例详解

    schedule方法和scheduleAtFixedRate方法的区别在于计算下一次执行的时间的方式。schedule方法计算下一次执行的时间是通过当前时间 + 时间片,而scheduleAtFixedRate方法计算下一次执行的时间是通过当前需要执行的...

    Java--Timer--TimerTask--.rar_java timer

    然后,我们可以使用`schedule`或`scheduleAtFixedRate`方法来安排任务。`schedule`方法用于一次性执行任务,而`scheduleAtFixedRate`则用于按固定速率周期性执行任务。 `TimerTask`是`Timer`类的辅助类,它代表一个...

    Java并发Timer源码分析

    在使用Timer来执行周期性任务时,需要在TimerTask中实现run()方法,并且可以使用Timer的scheduleAtFixedRate()方法来安排任务的执行时间。 Timer的缺陷主要体现在两个方面:一是Timer只创建唯一的线程来执行所有...

    taskTimer 线程 任务

    使用`Timer`类,你可以创建一个`TimerTask`实例,然后通过`Timer`的`schedule()`或`scheduleAtFixedRate()`方法来设定任务的执行时间。 1. **创建定时任务**:创建一个`TimerTask`子类,重写`run()`方法,这将是你...

    java.util.timer实现的简单定时任务

    接下来,我们可以通过`Timer`类的`schedule`方法来安排任务的执行。例如,如果你想在5秒后执行一次任务,可以这样做: ```java Timer timer = new Timer(); SimpleTask task = new SimpleTask(); timer.schedule...

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

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

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

    使用Timer对象的schedule()或scheduleAtFixedRate()方法安排任务执行。schedule()方法用于单次执行,scheduleAtFixedRate()方法用于周期性执行。例如: - 单次执行: ```java TimerTask myTask = new MyTask(); ...

    java类Timer和TimerTask的使用.pdf

    这个方法和`schedule`类似,但不同之处在于它会尽力确保任务按照固定的频率执行,即使前一次执行因为各种原因(如系统延迟)超过了预定的时间间隔,`scheduleAtFixedRate`也会尝试调整后续任务的执行时间以补偿之前...

Global site tag (gtag.js) - Google Analytics