Java Timer 和 TimerTask

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Java 的 Timer 和 TimerTask 用于在将来调度任务。TimerTask 是一个实现了 Runnable 接口的抽象类,它帮助在 Timer 类中调度任务。我们可以使用 TimerTask 类定义一个任务,并使用 Timer 类对其进行调度。Timer 使用后台线程来调度任务。

导入所需的包

使用以下代码导入 TimerTimerTask 所需的包。

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

使用 TimerTask 创建任务

使用 TimerTask 类创建一个要执行的任务。重写 run() 方法来定义要执行的任务。例如,我们可以创建一个任务来打印 "Hello, World!",如下所示:

TimerTask task = new TimerTask() {
    public void run() {
        System.out.println("Hello, World!");
    }
};

创建 Timer 对象

使用以下代码创建一个 Timer 对象。

Timer timer = new Timer();

使用 Timer 调度任务

使用 Timer 类的 schedule() 方法来调度任务。例如,如果我们希望任务在 1000 毫秒(1 秒)后执行,可以使用以下代码:

timer.schedule(task, 1000);

这将会调度任务在延迟 1 秒后执行。

调度任务的重复执行

我们还可以使用 schedule() 方法,通过指定延迟时间和周期参数来调度任务的重复执行。在以下示例中,我们调度一个任务,使其在延迟 1 秒后开始,每隔 2 秒打印一次 "Hello, World!"。

timer.schedule(task, 1000, 2000);

取消任务

我们还可以使用 TimerTask 类的 cancel() 方法来取消已调度的任务。在以下示例中,任务被调度为仅执行一次,然后取消。

TimerTask task = new TimerTask() {
    public void run() {
        System.out.println("Task is being executed...");
        cancel();
    }
};
timer.schedule(task, 1000);

使用 scheduleAtFixedRate() 方法

我们可以使用 scheduleAtFixedRate() 方法来调度任务以固定速率执行,而不考虑前一次执行的完成时间。例如,我们可以使用以下代码调度一个任务,使其每隔 2 秒打印一次 "Hello, World!",而不管任务执行需要多长时间:

timer.scheduleAtFixedRate(task, 1000, 2000);

使用 ExecutorService

我们可以使用 ExecutorService 来调度 TimerTask 对象。在这里,我们使用 ScheduledExecutorService 来调度任务。例如,我们可以创建一个任务,使其每隔 2 秒打印一次 "Hello, World!",代码如下:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(task, 1000, 2000, TimeUnit.MILLISECONDS);

编译并运行代码

最后,在终端中使用以下命令编译并运行代码:

javac TimerTaskDemo.java && java TimerTaskDemo

总结

在本实验中,我们学习了如何使用 Java 的 TimerTimerTask 来调度和执行在特定时间或延迟后运行的任务。我们还学习了如何调度重复执行的任务、取消任务、使用 scheduleAtFixedRate() 方法,以及使用 ExecutorService 来调度 TimerTask 对象。

您可能感兴趣的其他 Java 教程