《java多线程编程核心技术》读书笔记5:定时器Timer类的使用

时间:2021-02-10 00:12:21

第5章:定时器Timer

在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一任务,Timer类的主要任务就是设置计划任务,但封装任务 的类是TimerTask,执行计划任务的代码要放到TimerTask的子类中,因为TimerTask是一个抽象类。


Timer类的主要方法就是各种重载的schedule方法

schedule(TimerTask task,Date time)在time时刻执行task对象的run()方法,TimerTask类继承自Thread类,所以是一个线程,执行run()方法也就是启动线程。当time早于当前时间时,立即执行。

schedule(TimerTask task,Date firstDate, long period)在firstDate的时候执行任务,以后每period的时间重复执行一次任务。


TimerTask的canel()方法,将自身从任务列表中清除。

Timer的cancel()方法,移除任务列表中的全部任务,有的时候这个方法并不会停止执行计划的任务,因为这个Timer对象的cancel()方法没有争抢到任务队列的锁,所以TimerTask中的任务继续执行。


schedule(TimerTask,long delay)此方法以执行schedule方法当前的时间为参考时间,在此基础上延迟指定的毫秒数后执行一次TimerTask任务。

schedule(TimerTask,long delay,long period)此方法以执行schedule方法当前的时间为参考时间,在此基础上延迟指定的毫秒数后,再以某一间隔无限次执行TimerTask任务。


scheduleAtFixedRate(TimerTask task,Date firstDate, long period)此方法和schedule方法一样都会按顺序执行,不同的是:

          schedule方法,如果执行任务的时间没有被延迟,那么下一次任务的执行时间参考的是上一次任务的开始时间来计算的。

         scheduleAtFixedRate方法,如果执行任务的时间没有被延迟,那么下一次任务的执行时间参考的是上一次任务的结束时间来计算的。

         如果被延迟的话,则没有区别,那么下一次任务的执行时间参考的都是上一次任务的结束时间来计算的。