package java.util;
//抽象类:一种任务,可由定时器安排一次或重复执行,实现了Runnable接口
public abstract class TimerTask implements Runnable {
// 此对象用于控制对TimerTask内部的访问。
final Object lock = new Object();
//任务状态
int state = VIRGIN;
//尚无计划执行此任务
static final int VIRGIN = 0;
//计划执行此任务。如果是不重复的任务,
// 它还没有被执行。
static final int SCHEDULED = 1;
//非重复任务正在被执行,但没有被取消
static final int EXECUTED = 2;
//此任务被取消
static final int CANCELLED = 3;
//此任务的下一次执行时间,单位为毫秒
//假设此任务已计划执行。
//对于重复任务,此字段在每次任务执行之前更新。
long nextExecutionTime;
// 重复任务的周期(毫秒)。正值表示固定速率执行。负值表示固定延迟执行,值0表示不重复的任务。
long period = 0;
//创建一个TimerTask
protected TimerTask(){
}
//执行
public abstract void run();
//取消此任务
public boolean cancel(){
synchronized (lock) {
boolean result = (state == SCHEDULED);
state = CANCELLED;
return result;
}
}
// 返回最近一个实际执行此任务。(如果调用时,任务正在执行时,返回值是正在执行的任务的执行时间。
public long scheduledExecutionTime(){
synchronized (lock) {
return (period < 0 ? nextExecutionTime + period
: nextExecutionTime - period);
}
}
}