介绍
Java 的 Timer 和 TimerTask 用于在将来调度任务。TimerTask 是一个实现了 Runnable
接口的抽象类,它帮助在 Timer 类中调度任务。我们可以使用 TimerTask 类定义一个任务,并使用 Timer 类对其进行调度。Timer 使用后台线程来调度任务。
Java 的 Timer 和 TimerTask 用于在将来调度任务。TimerTask 是一个实现了 Runnable
接口的抽象类,它帮助在 Timer 类中调度任务。我们可以使用 TimerTask 类定义一个任务,并使用 Timer 类对其进行调度。Timer 使用后台线程来调度任务。
使用以下代码导入 Timer
和 TimerTask
所需的包。
import java.util.Timer;
import java.util.TimerTask;
使用 TimerTask
类创建一个要执行的任务。重写 run()
方法来定义要执行的任务。例如,我们可以创建一个任务来打印 "Hello, World!",如下所示:
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Hello, World!");
}
};
使用以下代码创建一个 Timer
对象。
Timer timer = new 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()
方法来调度任务以固定速率执行,而不考虑前一次执行的完成时间。例如,我们可以使用以下代码调度一个任务,使其每隔 2 秒打印一次 "Hello, World!",而不管任务执行需要多长时间:
timer.scheduleAtFixedRate(task, 1000, 2000);
我们可以使用 ExecutorService
来调度 TimerTask
对象。在这里,我们使用 ScheduledExecutorService
来调度任务。例如,我们可以创建一个任务,使其每隔 2 秒打印一次 "Hello, World!",代码如下:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(task, 1000, 2000, TimeUnit.MILLISECONDS);
最后,在终端中使用以下命令编译并运行代码:
javac TimerTaskDemo.java && java TimerTaskDemo
在本实验中,我们学习了如何使用 Java 的 Timer
和 TimerTask
来调度和执行在特定时间或延迟后运行的任务。我们还学习了如何调度重复执行的任务、取消任务、使用 scheduleAtFixedRate()
方法,以及使用 ExecutorService
来调度 TimerTask
对象。