在 Java 中调度重复固定延迟执行的任务
在固定延迟执行中,每次执行都是相对于前一次执行的原始执行时间进行调度的。如果由于某种原因(例如垃圾回收)导致执行延迟,则后续执行也将延迟。
可以通过两种方式调度重复固定延迟执行的任务:如下所示:
在指定时间调度重复固定延迟执行的任务
在指定延迟后调度重复固定延迟执行的任务
在指定时间调度重复固定延迟执行的任务
`void schedule(TimerTask task, Date firstTime, long period)` 方法用于调度重复固定延迟执行的任务,从指定时间开始。
**声明** − `java.util.Timer.schedule(TimerTask task, Date firstTime, long period)` 的声明如下:
public void schedule(TimerTask task, Date firstTime, long period)
这里,`task` 是要调度的任务,`firstTime` 是任务第一次执行的时间,`period` 是连续任务执行之间的时间间隔(毫秒)。
`schedule(Timertask task, Date firstTime, long period)` 方法会抛出一些异常,如下所示:
IllegalArgumentException | 如果 `firstTime.getTime()` 为负数或 `period` <= 0,则抛出此异常。 |
IllegalStateException | 如果任务已预先调度或取消,计时器已取消,或计时器线程已终止,则抛出此异常。 |
NullPointerException | 如果 `task` 为空,则抛出此异常。 |
让我们来看一个示例,演示如何在 Java 中调度任务以从指定时间开始重复固定延迟执行:
示例
import java.util.*; class MyTask extends TimerTask { public void run() { System.out.println("Task is running"); } } public class Example { public static void main(String[] args) { Timer timer = new Timer(); // creating timer TimerTask task = new MyTask(); // creating timer task timer.scheduleAtFixedRate(task,new Date(),2000); // scheduling the task at the specified time at fixed-delay } }
输出
Task is running Task is running Task is running Task is running Task is running
在指定延迟后调度重复固定延迟执行的任务
`void schedule(TimerTask task, long delay, long period)` 方法用于调度重复固定延迟执行的任务,从指定的延迟后开始。
**声明** − `java.util.Timer.schedule(TimerTask task, long delay, long period)` 的声明如下:
public void schedule(TimerTask task, long delay, long period)
这里,`task` 是要调度的任务,`delay` 是任务执行前的延迟时间(毫秒),`period` 是连续任务执行之间的时间间隔(毫秒)。
这里,`task` 是要调度的任务,`firstTime` 是任务第一次执行的时间,`period` 是连续任务执行之间的时间间隔(毫秒)。
`schedule(Timertask task, long delay, long period)` 方法会抛出一些异常,如下所示:
**IllegalArgumentException** | 如果 `firstTime.getTime()` 为负数或 `period` <= 0,则抛出此异常。 |
IllegalStateException | 如果任务已预先调度或取消,计时器已取消,或计时器线程已终止,则抛出此异常。 |
NullPointerException | 如果 `task` 为空,则抛出此异常。 |
让我们来看一个程序,演示如何使用 `void schedule(TimerTask task, long delay, long period)` 方法:
示例
import java.util.*; class MyTask extends TimerTask { public void run() { System.out.println("Task is running"); } } public class Example { public static void main(String[] args) { Timer timer = new Timer(); // creating timer TimerTask task = new MyTask(); // creating timer task // scheduling the task for repeated fixed-delay execution, beginning after the specified delay timer.schedule(task, 800, 1000); } }
输出
Task is running Task is running Task is running Task is running Task is running Task is running Task is running Task is running Task is running Task is running