Java 定时器
Java 定时器
1. 概述
Timer 可以按计划执行重复的任务或者定时执行指定任务,这是因为 Timer 内部利用了一个后台线程 TimerThread 有计划地执行指定任务。
-
Timer:是一个实用工具类,该类用来调度一个线程(schedule a thread) ,使它可以在将来某一时刻执行。Java 的 Timer 类可以调度一个任务运行一次或定期循环运行。
Timer tasks should complete quickly,即定时器中的操作要尽可能花费短的时间。
-
TimerTask:一个抽象类,它实现了 Runnable 接口。我们需要扩展该类以便创建自己的 TimerTask,这个 TimerTask 可以被 Timer 调度。
一个 Timer 对象对应的是单个后台线程,其内部维护了一个 TaskQueue,用于顺序执行定时器任务 TimeTask。
即:Timer 是定时器,TimerTask 是定时器任务。
2. 例子
举个例子:
public class TimerDemo {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
// 重写 run() 方法,返回系统时间
System.out.println(System.currentTimeMillis());
}
};
Timer timer = new Timer();
// 在经过 2000 毫秒的初始化延时后执行一次(单词执行)
timer.schedule(task, 2000);
// 从现在开始每间隔 1000 ms 计划执行一个任务(规律性重复执行调度 TimerTask)
timer.schedule(task, 0 ,1000);
}
}
3. Timer 常用构造函数和方法
3.1 Timer 的构造函数
Timer()
:创建一个新的定时器
3.2 Timer 的方法
void cancel()
:终止该定时器。(当应用程序想要快速地终止一个定时器执行线程,它应该调用 Timer 的cancel()
方法。int purge()
:从该定时器队列中移除所有取消的定时任务并且返回被移除任务的数目。void schedule(TimerTask task, Date time)
:在某个时间点调度任务执行。如timer.schedule(task, 2000)
。void schedule(TimerTask task, long delay, long period)
:以当前的时间为参考时间,在此时间基础上延迟指定的毫秒数,再以某一间隔时间无限次数地执行某一任务。如timer.schedule(task, 0, 1000)
。void schedule(TimerTask task, Date firstTime, long period)
:调度任务于 firstTime 开始,以固定时间间隔的方式重复执行,后续将以大约 period 毫秒数的固定时间间隔执行。
4. Timer 常用方法
定时任务都是抽象类 TimerTask 子类的实例,这些子类实现了 Runnable 接口,当子类化 TimerTask 的时候,你需要重写其 void run() 方法。
注意:定时任务应该很快完成。
方法
boolean cancel()
:取消这个定时任务long scheduleExecutionTime()
:返回此定时任务最近实际被调度执行的时间(当定时任务正在执行此方法被调用了,返回值就是运行中定时任务的调度执行时间)。long scheduleExecutionTime()
:返回此定时任务最近实际被调度执行的时间。若定时任务还没有开始首次执行,其返回值将是未定义的。