Java Timer、TimerTask、Reminder 类教程带示例

已发表: 2021-02-04
Java Timer、TimerTask、Reminder 类教程带示例

java.util.Timer是一个实用程序类,可用于安排线程在未来某个时间执行。 Java Timer 类可用于安排任务运行一次或定期运行。

java.util.TimerTask是一个实现 Runnable 接口的抽象类,我们需要扩展这个类来创建我们自己的 TimerTask,可以使用java Timer类进行调度。

Timer 类是线程安全的,多个线程可以共享一个 Timer 对象而无需外部同步。 Timer 类使用 java.util.TaskQueue 以给定的定期间隔添加任务,并且在任何时候都只能有一个线程运行 TimerTask,例如,如果您要创建一个 Timer 以每 10 秒运行一次但单线程执行需要 20 秒,然后 Timer 对象将继续向队列中添加任务,一旦一个线程完成,它将通知队列,另一个线程将开始执行。

Java 定时器类

Timer 类使用对象等待和通知方法来安排任务。 TimerTask 是一个abstract class ,我们继承它来提供具体的实现。 TimerTask 类implementsRunnable interface ,因此它是一个线程,因此您的 TimerTask 实现也是一个线程。

非常简单的 Timer 和 TimerTask 示例:任务在5 seconds后执行。

结果:

这个简单的程序说明了实现和调度要由计时器线程执行的任务的以下基本部分:

  • 实现TimerTask的自定义子类。 run方法包含执行任务的代码。 在此示例中,子类名为 CrunchifyReminder。
  • 通过实例化Timer类来创建线程。
  • 实例化TimerTask对象 ( new CrunchifyReminder() )。
  • 安排定时器任务执行。

如何重复执行此 TimerTask?

结果:

默认情况下,只要计时器线程在运行,程序就会一直运行。 您可以通过四种方式终止计时器线程:

  • 在计时器上调用cancel 。 您可以从程序中的任何位置执行此操作,例如从计时器任务的run方法。
  • 通过像这样创建计时器,使计时器的线程成为“守护进程”: new Timer(true) 。 如果程序中剩下的唯一线程是守护线程,则程序退出。
  • 在所有计时器的计划任务执行完毕后,删除对Timer对象的所有引用。 最终,计时器的线程将终止。
  • 调用System.exit方法,使整个程序(及其所有线程)退出。