`

Timer中schedule和scheduleAtFixedRate方法区别

 
阅读更多

转自:https://blog.csdn.net/ling912439122/article/details/52712406

 

Timer,一般用来做延时任务或者循环定时执行的任务。

例如:指定在一小时后闹钟就响了,或者每天6:00响,这些都是延时任务或者是定时循环的任务

 

使用Timer的时候,必须要有一个TimerTask去执行任务,这是一个线程,它实现了Runnable接口,run方法里面就是线程需要做的,也是我们自己定义的。

 

下面来看代码:

上面几行代码只是定义了一个Date和一个Timer,以及一个TimerTask

下面来看看使用:

代码前两行,只接收两个参数,分别是TimerTask和时间,这两种使用方式都是只执行一次,不是循环执行的。

第一行:在指定时间的时候去执行传递进去的TimerTask,不循环执行

第二行:延时一段时间后执行TimerTask,这里指的是延时1秒钟后执行TimerTask

 

中间两行涉及到了循环执行,比前两行多传递了一个参数,也就是间隔时间。间隔一段时间执行一次TimerTask

第三行:一秒后执行TimerTask,并且每隔1秒执行一次(第二个参数是延时,第三个参数是间隔时间)

第四行:在指定的时间执行TimerTask,并且开始每隔1秒执行一次

 

接下来重点来了,后面两个方法。后面两个方法,看起来就和前面来两个方法就不一样了,哈哈。

究竟怎么样,往下看。

第五行:其实和第三行是一样的,都是延时执行,然后每次间隔一定的时间执行一次TimerTask

第六行:这行和第四行就有区别了,相同的是:都是在指定的时间开始执行,然后每隔一段时间执行。

不同的是:schedule在执行的时候,如果Date过了,也就是Date是小于现在时间,那么会立即执行一次,然后从这个执行时间开始每隔间隔时间执行一次,

scheduleAtFixedRate在执行的时候,如果Date过了。还会执行,然后才是每隔一段时间执行。

看代码执行的结果:

这个是schedule的执行结果,你会发现,如果这个时间过了,会直接执行,然后开始每隔一秒后执行。

 

下面来看看scheduleAtFixedRate的执行结果。

这是scheduleAtFixedRate的执行结果。这里是每隔5分钟执行一次,我这个是在大概17:08分执行的,我这里指定的时间是:16:30

从16:30开始算,每隔5分钟,也就是16:30 16:35 16:40 16:45 16:50 16:55 17:00 17:05分别执行一次,算下来刚好是8次,这就对了,所以我们刚运行的时候一次性执行了8次,然后打印结果中,最后一次是在17:10的时候执行的。你就会发现,其实最后一次和倒数第二次的间隔不是5分钟,而是刚好是17:10的当前毫秒数。

这就是两者间的差别了,schedule是直接执行,并且以此刻为开始时间,开始执行,并且过去的不再执行。而scheduleAtFixedRate是判断时间,如果过了,那么就算出之前执行的次数,依次执行,然后等待下一次执行时间的到来。下一次就是17:10,而不是17:13(17:08的后5分钟)。也就是从指定时间点开始按间隔时间循环执行,差了多少次直接补上,跟程序运行时间关系不大(其实吧输出时间format一下输出更直观)

这就是两者最大的差别。

 

 

分享到:
评论

相关推荐

    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` 的执行。前者按指定延迟后首次执行,然后每次间隔指定的时间执行;后者则保证两次执行之间的间隔固定,即使上一次执行超时也...

    android中timer的使用

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

    Timer和TimerTask的使用

    `Timer` 和 `TimerTask` 是Java中用于实现定时任务的重要工具。它们提供了一种简单有效的方式来安排任务的执行,既可以一次性执行也可以周期性地执行。这对于实现定时提醒、定时备份等功能非常有用。 #### 二、...

    简单的timer例子

    在这个实例中,我们将探讨`Timer`类的主要用法和相关概念。 首先,`Timer`类创建了一个定时器对象,它可以调度`TimerTask`实例的执行。`TimerTask`是Java中的一个抽象类,你需要创建它的子类并重写`run()`方法来...

    Java并发Timer源码分析

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

    Alert和Timer编程范例

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

    timer写的任务池

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

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

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

    taskTimer 线程 任务

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

    JavaTimer和TimerTask实例教程Java开发

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

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

    在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们用于调度周期性的任务执行。这两个类在多线程环境下尤其有用,能够帮助开发者安排在将来某一特定时间或定期执行的任务。让我们深入了解一下`Timer`和`...

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

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

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

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

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

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

    Java语言中Timer类的简洁用法

    `start()`方法中,`timer.schedule()`方法被用来设置定时器,传入一个匿名内部类的`TimerTask`实例,该`TimerTask`在运行时会调用`playSound()`方法,并在完成时取消计时器。 如果需要计划一个重复执行的任务,`...

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

    在提供的`timerTask.txt`和`timerTask`文件中,可能包含了使用Timer和TimerTask实现的具体示例代码,你可以打开这些文件进一步学习和研究。通过实践和调试,你将更好地理解和掌握Java中的定时任务处理。

    JAVA中定时器的使用

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

Global site tag (gtag.js) - Google Analytics