`
tangqi609567707
  • 浏览: 36353 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

schedule和scheduleAtFixedRate

    博客分类:
  • JAVA
阅读更多

原文地址:http://blog.csdn.net/weidan1121/article/details/527307

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


}

<!-- Baidu Button BEGIN -->
分享到:
评论

相关推荐

    Java Timer:schedule和scheduleAtFixedRate

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

    Java定时任务schedule和scheduleAtFixedRate的异同

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

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

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

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

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

    java并发编程.docx

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

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

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

    Java定时器例子_动力节点Java学院整理

    我们创建了两个MyTask对象,并使用schedule和scheduleAtFixedRate方法来执行这两个任务。在这个例子中,我们使用while循环来等待用户输入,并将用户输入的信息用于控制定时器的行为。 Java定时器机制提供了一种灵活...

    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中定时器的使用

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

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

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

    TimingTrigger

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

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

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

    android 应用 源代码——定时器

    `Timer`类提供了`schedule`和`scheduleAtFixedRate`这两个主要的方法来安排任务。 1. `schedule(TimerTask task, long delay)`:此方法会在延迟`delay`毫秒后执行指定的`TimerTask`。 2. `scheduleAtFixedRate...

    ScheduledExecutorService 计时器任务处理

    1. `schedule(Runnable command, long delay, TimeUnit unit)`: 这个方法会在指定的延迟后执行一次给定的任务。延迟时间由`delay`参数和`TimeUnit`参数共同决定,例如可以设置为10秒、1分钟等。 2. `...

    java 计时器

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

    java实现定时器代码

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

Global site tag (gtag.js) - Google Analytics