您的位置:首页 > 其它

Timer 定时器相关类

2016-04-11 11:04 232 查看

Timer相关类

定时执行相关类,包括java.util.Timer,以及TimerTask、还有内部类TaskQueue、TimerThread等

###java.util.TimerTask

Timer执行的调度单元。

#####常用的属性

nextExecutionTime


Task下一次执行时间

period


执行间隔时间。有负值、正值、0三种。0表示这个Task只执行一次、负值表示,计算下次执行时间时,用当前任务执行的当前时间+间隔时候计算。正值表示,第一次时,用起始时间+间隔时间得到下次执行时间,然后严格用执行时间+间隔时间,所以为负值的时候为“补偿”当前时间到初始时间之前所有的过时任务。

3、
state
以及常量
VIRGIN
SCHEDULED
EXECUTED
CANCELLED


Task的状态。

###java.util.Timer

Timer调度执行类

TaskQueue 任务队列内部类

内部维护一个TimerTask数组,起始大小为128,然后以2倍扩大。

数组是一个二叉树结构的最小堆,每上层大小都比下层要小。并向外提供了一系列操作数据方法,同时存取任务方法中都有维护最小堆。插入队尾和弹出队首方法后,分别用
fixUp
fixdown
重排序。还有一个
heapify
重排序方法。

TimerThread 调度器线程内部类

newTasksMayBeScheduled


boolean字段,受queue监视器保护,表明Timer是否还有活的引用。

queue


所有执行任务,为
TaskQueue
实例。

mainLoop


循环执行所有任务。其中有关于
period
三种情况的不同处理方法。

常用属性

queue


任务队列,是一个最小堆队列。

thread


执行任务线程,TimerThread实例类。

nextSerialNumber


定时器序列号生成器

常用方法

schedule
scheduleAtFixedRate
重载方法

两者调用
sched
私有方法,根据传入的参数的不同,决定
period
的值。由
period
的值决定Task的规则类型。

Timer内部逻辑

计时器主要用的类有两个,一个是调度执行器Timer,一个是任务类TimerTask。

TimerTask继承了Runnable接口,是一个多线程类,根据
period
值分为:

0,一次执行;

负值,按当前执行时间+间隔时间执生成下次执行时间。

正值,按上次执行时间+间隔时间生成下次执行时间。该方式会补偿执行从初始时间到当前时间内,有多少个间隔次数没有执行。

Timer类中,有两个内部类,一个是任务队列类。内部维护一个最小堆。一个是调度线程类TimerThread,无限循环执行任务队列中的任务。

Timer主类中,持有一个任务队列与调试线程类。主要有一系列重载的调试方法,除了之前的执行间隔机制的不同,还有初始时间的不同,根据传入的类型,可以是一个指定时间点(Date),也可以是当前时间往后延迟指定时间段(Long)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: