如何在 Java 中调度任务,使其以固定的延迟重复执行,并在指定的延迟后开始


Timer 类中的一个方法是 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如果 delay 为负数,或 delay + System.currentTimeMillis() 为负数,或 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

更新于: 2020-06-25

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告