`

转: schedule和scheduleAtFixedRate的区别

    博客分类:
  • J2SE
阅读更多
import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;

/**
 * @author vincent
 */
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)。


}

转自:http://blog.csdn.net/weidan1121/archive/2005/11/11/527307.aspx

分享到:
评论

相关推荐

    Java Timer:schedule和scheduleAtFixedRate

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

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

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

    Java定时任务schedule和scheduleAtFixedRate的异同

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

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

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

    java Schedule

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

    java schedule

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

    java schedule-定时器

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

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

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

    定时器框架schedule

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

    ScheduledExecutorService 计时器任务处理

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

    定时程序-java版

    在Java编程语言中,实现定时任务是通过使用定时器(Timer)类和相关的调度接口来完成的。定时程序是任何应用程序中的重要组成部分,它允许在特定时间间隔执行某些任务,或者在预设的时间点触发事件。Java提供了丰富...

    JAVA中定时器的使用

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

    深入理解Java定时调度(Timer)机制

    5. schedule()和scheduleAtFixedRate()的区别:schedule()方法用于实现循环调度,而scheduleAtFixedRate()方法用于实现固定速率的调度。两者之间的区别在于schedule()方法会考虑到任务执行的时间,而...

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

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

    java 计时器

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

    java并发编程.docx

    3. ScheduledThreadPool:支持定时和周期性执行任务,适用于计划任务,如示例所示,可以使用schedule和scheduleAtFixedRate方法来安排任务。 二、ThreadLocal ThreadLocal是Java提供的一种线程局部变量,每个线程...

    java_clock.rar_Java 闹钟代码_闹钟

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

    java定时器

    创建一个`Timer`对象后,可以调用其`schedule`或`scheduleAtFixedRate`方法来安排任务执行。`Timer`是线程安全的,意味着多个线程可以共享一个`Timer`对象,而不会出现竞态条件。 2. **`java.util.TimerTask`类**:...

Global site tag (gtag.js) - Google Analytics