-
关于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个答案 按时间排序 按投票排序
-
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,用于安排和执行定时任务。虽然这两个方法看起来很相似,但是它们之间...
本篇文章将深入探讨 `Timer` 类的两个核心方法:`schedule` 和 `scheduleAtFixedRate`,以及它们在实际开发中的应用。 首先,`schedule` 方法有两种重载形式,一种是安排一个 `TimerTask` 在特定的延迟后执行,另一...
Timer类有两种执行任务的模式:schedule和scheduleAtFixedRate。schedule模式可以在某个时间或固定的时间延迟后执行任务,而scheduleAtFixedRate模式可以让任务在固定的频率下运行。 schedule模式的使用方法如下所...
3. 计划任务:使用 `schedule()` 或 `scheduleAtFixedRate()` 方法来安排 `TimerTask` 的执行。前者按指定延迟后首次执行,然后每次间隔指定的时间执行;后者则保证两次执行之间的间隔固定,即使上一次执行超时也...
在主程序中,我们可以通过Timer的schedule()或scheduleAtFixedRate()方法来安排任务执行: ```java Timer timer = new Timer(); timer.schedule(new FileStatusChecker(fileName), initialDelay, period); ``` ...
### Timer和TimerTask的使用详解 #### 一、引言 `Timer` 和 `TimerTask` 是Java中用于实现定时任务的重要工具。它们提供了一种简单有效的方式来安排任务的执行,既可以一次性执行也可以周期性地执行。这对于实现...
接下来,我们可以使用`Timer`的`schedule()`方法来安排任务的执行。例如,如果你想在特定延迟后执行一次任务,可以这样操作: ```java Timer timer = new Timer(); timer.schedule(new MyTask(), 5000); // 延迟5秒...
要将`TimerTask`添加到任务池并设定执行时间,可以使用`Timer`的`schedule()`或`scheduleAtFixedRate()`方法。前者用于一次性或间隔性的任务,而后者则用于定期执行任务,即使前一次执行超时也会继续执行下一次。 ...
此外,`Timer`任务调度是非阻塞的,这意味着`schedule()`方法会立即返回,不会等待任务执行完毕。 `Timer`类还有几个重要的方法: 1. `cancel()`:取消`Timer`,停止所有计划但尚未开始的任务。 2. `purge()`:清除...
它包含两个核心方法:schedule(TimerTask task, long delay)和scheduleAtFixedRate(TimerTask task, long initialDelay, long period)。前者在指定延迟后首次执行任务,而后者则会按固定的间隔重复执行任务。 ...
创建一个`Timer`对象后,你可以使用`schedule()`或`scheduleAtFixedRate()`方法来安排任务。`schedule()`方法用于单次延迟执行,而`scheduleAtFixedRate()`方法则用于周期性地执行任务。 下面是一个使用`Timer`类...
当你调用`Timer`的`schedule`或`scheduleAtFixedRate`方法时,任务会被添加到内部的任务队列中,并在指定的时间由`Timer`的后台线程执行。`Timer`实例一旦创建,就会持续运行,直到所有的任务都执行完毕,或者通过...
schedule方法和scheduleAtFixedRate方法的区别在于计算下一次执行的时间的方式。schedule方法计算下一次执行的时间是通过当前时间 + 时间片,而scheduleAtFixedRate方法计算下一次执行的时间是通过当前需要执行的...
然后,我们可以使用`schedule`或`scheduleAtFixedRate`方法来安排任务。`schedule`方法用于一次性执行任务,而`scheduleAtFixedRate`则用于按固定速率周期性执行任务。 `TimerTask`是`Timer`类的辅助类,它代表一个...
在使用Timer来执行周期性任务时,需要在TimerTask中实现run()方法,并且可以使用Timer的scheduleAtFixedRate()方法来安排任务的执行时间。 Timer的缺陷主要体现在两个方面:一是Timer只创建唯一的线程来执行所有...
使用`Timer`类,你可以创建一个`TimerTask`实例,然后通过`Timer`的`schedule()`或`scheduleAtFixedRate()`方法来设定任务的执行时间。 1. **创建定时任务**:创建一个`TimerTask`子类,重写`run()`方法,这将是你...
接下来,我们可以通过`Timer`类的`schedule`方法来安排任务的执行。例如,如果你想在5秒后执行一次任务,可以这样做: ```java Timer timer = new Timer(); SimpleTask task = new SimpleTask(); timer.schedule...
在这个示例中,我们创建了两个 TimerTask 对象 myTask1 和 myTask2,并使用 schedule 和 scheduleAtFixedRate 方法来执行任务。myTask1 将在 1 秒后执行,每隔 2 秒执行一次,而 myTask2 将在 2 秒后开始执行,每隔 ...
使用Timer对象的schedule()或scheduleAtFixedRate()方法安排任务执行。schedule()方法用于单次执行,scheduleAtFixedRate()方法用于周期性执行。例如: - 单次执行: ```java TimerTask myTask = new MyTask(); ...
这个方法和`schedule`类似,但不同之处在于它会尽力确保任务按照固定的频率执行,即使前一次执行因为各种原因(如系统延迟)超过了预定的时间间隔,`scheduleAtFixedRate`也会尝试调整后续任务的执行时间以补偿之前...