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)。
相关文章推荐
- 结构体字节对齐
- 利用oracle执行系统命令
- java嵌套类和内部类
- Java基础
- 80. Remove Duplicates from Sorted Array II
- 初次使用Android Studio时的配置
- mysql字段约束
- 学习z-stack协议栈的serialApp例子(1)
- 安卓Version信息的几个应用:升级管理,guide页面显示
- 第六周进度条
- shell下一层输入yes
- Java String的一些方法使用
- Qt 水平滚动字幕2
- java中equals和==以及toString
- SAP-ABAP 通过字符串计算公式,执行计算的函数:EVAL_FORMULA
- 关键帧动画CAKeyframeAnimation
- [剑指offer][第四章][28]字符串的排列
- Android中内容观察者的使用---- ContentObserver类详解
- IIrebmuNelgniS.137
- Android应用方法数65536的限制问题