计划任务以重复执行Java中的固定延迟

在固定延迟执行中,相对于先前执行的原始执行时间安排每次执行。如果执行由于特定原因而延迟(例如,垃圾回收),则后续执行也将延迟。

可以通过两种方式安排任务以重复执行固定延迟。它们如下-

  • 安排任务在指定时间重复执行固定延迟

  • 在指定的延迟后安排任务以重复执行固定延迟

安排任务在指定时间重复执行固定延迟

void schedule(TimerTask task,Date firstTime,long period)方法计划从指定时间开始重复执行固定延迟的任务。

声明-java.util.Timer.schedule(TimerTask任务,Date firstTime,长周期)声明如下-

public void schedule(TimerTask task, Date firstTime, long period)

在此,任务是要调度的任务,第一次是第一次执行任务,周期是两次连续任务执行之间的时间(以毫秒为单位)。

schedule(Timertask任务,Date firstTime,long period)方法引发的异常很少。它们如下-

IllegalArgumentException如果firstTime.getTime为负或期间<= 0,则抛出此异常
IllegalStateException如果事先计划或取消了任务,取消了计时器或终止了计时器线程,则抛出此异常。
空指针异常如果任务为空,则抛出此异常。

让我们看一个示例,该示例显示如何调度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);
      //在固定的时间在指定的时间安排任务
   }
}

输出结果

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任务,长时间延迟,长时间)声明如下-

public void schedule(TimerTask task, long delay, long period)

此处,任务是要调度的任务,延迟是执行任务后的延迟(以毫秒为单位),周期是连续任务执行之间的时间(以毫秒为单位)。

在此,任务是要调度的任务,第一次是第一次执行任务,周期是两次连续任务执行之间的时间(以毫秒为单位)。

schedule(Timertask任务,长延迟,长周期)方法引发的异常很少。它们如下-

llegalArgumentException如果firstTime.getTime为负或期间<= 0,则抛出此异常
IllegalStateException如果事先计划或取消了任务,取消了计时器或终止了计时器线程,则抛出此异常。
空指针异常如果任务为空,则抛出此异常。

让我们看一下一个程序,该程序说明了void Schedule(TimerTask任务,长延迟,长周期)方法的使用-

示例

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.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