定时执行相关类,包括java.util.Timer,以及TimerTask、还有内部类TaskQueue、TimerThread等java
###java.util.TimerTaskapi
Timer执行的调度单元。数组
#####经常使用的属性多线程
nextExecutionTime
Task下一次执行时间oop
period
执行间隔时间。有负值、正值、0三种。0表示这个Task只执行一次、负值表示,计算下次执行时间时,用当前任务执行的当前时间+间隔时候计算。正值表示,第一次时,用起始时间+间隔时间获得下次执行时间,而后严格用执行时间+间隔时间,因此为负值的时候为“补偿”当前时间到初始时间以前全部的过期任务。线程
三、state
以及常量VIRGIN
、SCHEDULED
、EXECUTED
、CANCELLED
Task的状态。调试
###java.util.Timercode
Timer调度执行类排序
fixUp
,fixdown
重排序。还有一个heapify
重排序方法。newTasksMayBeScheduled
boolean字段,受queue监视器保护,代表Timer是否还有活的引用。继承
queue
全部执行任务,为TaskQueue
实例。
mainLoop
循环执行全部任务。其中有关于period
三种状况的不一样处理方法。
queue
任务队列,是一个最小堆队列。
thread
执行任务线程,TimerThread实例类。
nextSerialNumber
定时器序列号生成器
schedule
与 scheduleAtFixedRate
重载方法sched
私有方法,根据传入的参数的不一样,决定period
的值。由period
的值决定Task的规则类型。计时器主要用的类有两个,一个是调度执行器Timer,一个是任务类TimerTask。
TimerTask继承了Runnable接口,是一个多线程类,根据period
值分为:
Timer类中,有两个内部类,一个是任务队列类。内部维护一个最小堆。一个是调度线程类TimerThread,无限循环执行任务队列中的任务。
Timer主类中,持有一个任务队列与调试线程类。主要有一系列重载的调试方法,除了以前的执行间隔机制的不一样,还有初始时间的不一样,根据传入的类型,能够是一个指定时间点(Date),也能够是当前时间日后延迟指定时间段(Long)。