`
wangzjie
  • 浏览: 74964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Timer scheduleAtFixedRate与schedule的区别

    博客分类:
  • java
阅读更多

scheduleAtFixedRate与schedule的区别主要是基准时间点以及第一次执行时执行的次数

 

 timer.scheduleAtFixedRate(TimerTask, startTime, period): 如果执行时间executeTime>startTime,则一执行就会从startTime开始(startTime时就会跑一次),每隔peroid跑TimerTask。以startTime为起点。

 

public class TimerTest {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat f = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println("do task at "+new Date());
            }
        }, f.parse("2014-04-15 17:20:00"), 10 * 1000);
    }
}

 执行时间是17:28:01,执行结果是

 

 

do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
//以上是开始执行时立刻执行了X次,X是从startTime开始每隔peroid时间执行一次直到executeTime.
//以下是以startTime开始每隔peroid执行一次
do task at Tue Apr 15 17:28:10 CST 2014
do task at Tue Apr 15 17:28:20 CST 2014

 

timer.schedule(TimerTask, startTime, period): 如果执行时间executeTime>startTime,其实基准时间已经变成executeTime,每隔peroid跑TimerTask。以executeTime为起点。(如果executeTime<startTime,则基准时间还是startTime)

同样的例子,结果是

 

do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:11 CST 2014
do task at Tue Apr 15 17:28:21 CST 2014

 就在executeTime执行一次,然后以executeTime为基准点每隔peroid执行一次

 

 scheduleAtFixedRate与schedule的下一次执行时间都是上一次执行完成时间+间隔时间,只是由于第一次执行时executeTime>startTime时造成的基准时间不一致而造成的的。

 

另外,如果task的执行时长>间隔时长peroid, 则下一次执行时间是上一次完成时间, scheduleAtFixedRate与schedule和都是一样的。

public class TimerTest {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat f = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("start do task at "+new Date());
                try{
                    Thread.sleep(11000);
                }catch(Exception e){
                    e.printStackTrace();
                }
                System.out.println("end do task at "+new Date());
            }
        }, f.parse("2014-04-15 18:01:00"), 10 * 1000);
    }
}

 执行时间是18:01:25, 执行结果

start do task at Tue Apr 15 18:01:25 CST 2014
end do task at Tue Apr 15 18:01:36 CST 2014
//这里可以看出下次执行时间就是上次完成时间
start do task at Tue Apr 15 18:01:36 CST 2014
end do task at Tue Apr 15 18:01:47 CST 2014
start do task at Tue Apr 15 18:01:47 CST 2014
end do task at Tue Apr 15 18:01:58 CST 2014

 

scheduleAtFixedRate结果也是一样的

分享到:
评论

相关推荐

    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例子

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

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

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

    timer写的任务池

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

    android中timer的使用

    timer.scheduleAtFixedRate(task, 0, 5000); // 零延迟开始,每5秒执行一次 ``` 需要注意的是,`TimerTask`中的`run()`方法会在后台线程执行,因此不能直接更新UI。如果需要更新UI,需要借助`Handler`或`...

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

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

    Timer与TimerTask(计时器)

    ### Timer与TimerTask详解 在Java编程语言中,`Timer`和`TimerTask`是用于执行定时任务的重要类。这两个类通常被用来处理那些需要在指定时间或周期性执行的任务,比如定时清理缓存、定时更新数据库等场景。 #### ...

    Timer定时器的使用方法

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

    Alert和Timer编程范例

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

    Timer和TimerTask的使用

    - 调用了`timer.schedule(new MyTask(), 1000, 2000)`来安排任务,在1秒后首次执行,并且每2秒重复执行一次。 - 使用了一个无限循环来等待用户的输入,如果用户输入字符`c`,则调用`timer.cancel()`来取消所有的定时...

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

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

    Java并发Timer源码分析

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

    taskTimer 线程 任务

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

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

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

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

    7. **注意与线程池的区别**: 虽然Java定时器可以用来调度任务,但它不同于Java的ExecutorService或ScheduledExecutorService。后者是Java并发API的一部分,提供了更高级的线程管理和任务调度功能,如更灵活的定时...

    JavaTimer和TimerTask实例教程Java开发

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

    定时器Timer实例.rar

    `Timer`提供了几种方法来安排任务,如`schedule(TimerTask task, long delay)`和`schedule(TimerTask task, Date firstTime, long period)`,分别用于延迟执行和周期性执行。 2. **TimerTask类**: `java.util....

    Jdk的Timer 实现定时器

    使用`Timer`对象的`schedule()`方法可以安排任务的执行。如果你想要在特定延迟后执行一次任务,可以使用如下代码: ```java TimerTask task = new ProgressUpdateTask(); timer.schedule(task, delay); ``` ...

Global site tag (gtag.js) - Google Analytics