一、TimerTask
TimerTask代表一个需要多次执行的任务,它实现了Runnable接口,可以在run()方法中定义任务逻辑。
TimerTask相当于Quartz中的StatefulJob(有状态的Job),两种的区别在于,每当执行任务时,Quartz都会创建一个Job实例,而Timer则使用相同的TimerTask实例。所以,如果TimerTask类中拥有状态,那么这些状态对于后面的执行是可见的。
public class SimpleTimerTask extends TimerTask {
//状态,每次任务都使用相同的实例,所以状态是共享的,线程不安全
private int count=0;
//子类覆盖这个run()方法,并定义任务的执行逻辑,每次执行任务时,该方法就会被调用
@Override
public void run() {
System.out.println("Execute task");
//此任务的计划执行时间点,实际执行时间与计划执行时间可能存在不一致
long exeTime=scheduledExecutionTime();
System.out.println("本次任务计划执行时间:"+new Date(exeTime));
//因为count是每个任务共享的,每执行一次任务就会增加
if(++count>