Java 定时器

Rashmi Patidar 2023年1月30日 2021年7月1日
  1. 在 Java 中使用 Timer 安排一次性任务
  2. 在 Java 中安排重复计时器
Java 定时器

Timer 是 Java 编程语言中的一项服务,允许用户安排未来的事件。这些未来事件可以是一次,也可以定期重复。我们可以使用触发器来启动未来的事件。

在 Java 中使用 Timer 安排一次性任务

import java.util.Timer;
import java.util.TimerTask;

public class StopWatch {
    Timer timer;

    public StopWatch(int seconds) {
        timer = new Timer();
        timer.schedule(new StopTask(), seconds * 1000);
    }

    public static void main(String[] args) {
        new StopWatch(10);
        System.out.println("StopWatch Started.");
    }

    class StopTask extends TimerTask {
        public void run() {
            System.out.println("Time Up!");
            timer.cancel();
        }
    }
}

在上面的代码块中,我们创建了一个名为 StopWatch 类的公共类。它有它的公共构造函数,它需要以秒为单位的时间。在构造函数块中,创建了一个计时器实例。在计时器实例上,schedule 方法被调用。此方法任务是在给定的时间量安排特定事件。它需要两个参数 TimerTask 实例和延迟。我们以毫秒为单位定义延迟。当定义的给定延迟无效时,该方法抛出 IllegalArgumentException,当提供的任务已被安排或取消时,IllegalArgumentException。当提供的任务实例为空时,它也会抛出 NullPointerException

在构造函数的正下方,我们有 main 方法,从那里开始实际执行。它创建了一个具有定义延迟的 StopWatch 类的新实例,它在内部执行构造函数块中的语句。

main 方法下面,定义了一个名为 StopTask 的内部类,它扩展了一个 TimerTask 抽象类。TimerTask 是一个抽象类,它有一个称为 run 方法的抽象方法。该方法需要在 StopTask 类中被覆盖,如果没有被覆盖,该类本身应该成为抽象的。现在在 run 方法中,我们已经使用 cancel 方法停止了计时器。该方法丢弃任何当前计划的任务并终止计时器任务。

下面是上述代码块的输出。当遇到 schedule 方法中的延迟时,将打印第二行。

StopWatch Started.
Time Up!

在 Java 中安排重复计时器

我们将修改上面的代码来创建一个重复的计时器。重复计时器以固定的时间间隔重复执行。

在下面的代码块中,我们创建了一个 Timer 实例。实例变量的用途是调用方法 scheduleAtFixedRate 方法,该方法安排未来的事件。该方法有多种实现方式。我们使用的那个需要三个参数。首先,TimerTask 实例包含与我们希望在未来执行的操作相关的语句。接下来,delay 变量定义了任务或事件运行所花费的时间。最后是定义事件连续调用之间的时间的 period。此方法引发异常,包括 NullPointerException IllegalArgumentIllegalState 异常。

import java.util.Timer;
import java.util.TimerTask;

public class RepeatedTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();
        System.out.println("Stop Watch Started.");
        timer.scheduleAtFixedRate(new RepeatedTask(), 500, 1000);
    }

    static class RepeatedTask extends TimerTask {
        public void run() {
            System.out.println("Running!");
        }
    }
}

以下是预定的未来事件的永无止境的结果。

Running!
Running!
Running!
Running!
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

相关文章 - Java Timer