重点技术点

指定时间执行任务
指定周期执行任务

5.1 定时器Timer使用

Timer类
TimerTask类
// 在指定时间执行一次任务

schedule(TimerTask tast,Date time)

Timer timer=new Timer(true); // 设为守护进程,运行完就结束
MyTask extends TimerTask
MyTask task=new MyTask();
timer.schedule(task,time);

计划时间早于当前时间,提前运行

多个TimerTask任务,延时测试

顺序执行任务;
前一个任务执行时间会影响下一个任务的执行开始时间

// 指定周期执行一次任务
schedule(TimerTask task,Date firstTime,long period)

TimerTask类的cancel()方法

将自身从任务队列中清除
this.cancle();

Timer类的cancel()方法

将任务队列中全部任务清空
timer.cancel();
注意:此方法并不一定会停止执行计划任务

schedule(TimerTask task,long delay)

在当前时间基础上延迟指定毫秒数后执行任务

schedule(TimerTask task,long delay,long period)

在当前时间延迟指定毫秒数,再以指定周期无限执行任务

scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

与schedule方法进行对比
不延迟的情况下,两者计算下一个任务的开始时间不同
延迟情况下,计算方式相同
schedule不延迟时,以上一次任务开始+delay时间计算,下一次任务的执行时间
scheduleAtFixedRate 不延迟时,以上一次任务开始+delay的时间计算下一次任务执行时间

延迟时,两者都是以上一次任务结束的时间计算下一次任务执行时间

追赶性比较:
schedule不具有追赶性
scheduleAtFixedRate 具有追赶性,会补充丢掉的时间的任务;