四、 Timer 和 Timer Task 的使用html
Timer 是一种定时器工具,用来在一个后台线程计划执行指定任务,这些任务能够被执行一次,也能够被按期执行。每一个 Timer 对象对应一个后台线程,顺序地执行全部计时器任务。若是完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程,从而可能延迟后续任务的执行。对 Timer 对象最后的引用完成而且全部未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(而且成为垃圾回收的对象)。TimerTask是一个抽象类,实现了Runable接口,它的子类表明一个能够被Timer计划的任务。java
1) 一个简单的Demo,让你们对Timer、TimerTask的使用有感性的认识。api
2) Timer和TimerTask的经常使用api函数说明函数
这里强调Timer类的schedule和scheduleAtFixedRate的区别。schedule和scheduleAtFixedRate的区别在于,schedule以固定的相对时间间隔执行,若是某一次执行被延时了,日后的执行的执行时间也会相对延时;而scheduleAtFixedRate是以绝对的时间间隔执行,若是某一次执行被延时,它的后一次执行的延时将会缩短(scheduleAtFixedRate会把已通过去的时间也做为周期执行)。schedule注重的是时间间隔的稳定,而scheduleAtFixedRate注重的是执行频率的稳定。工具
3) Timer的终止spa
默认状况下,只要一个程序的timer线程在运行,那么这个程序就会保持运行。固然,你能够经过如下四种方法终止一个timer线程:线程
a)调用timer的cancle方法。你能够从程序的任何地方调用此方法,甚至在一个timer task的run方法里;htm
b)让timer线程成为一个daemon线程(能够在建立timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行;对象
c)当timer相关的全部task执行完毕之后,删除全部此timer对象的引用(置成null),这样timer线程也会终止;blog
d)调用System.exit方法,使整个程序(全部线程)终止。
总结:Timer和TimerTask能够简单理解为Timer定时器在触发TimerTask任务调用,一般用schedule和scheduleAtFixedRate方法来调用timertask任务,cancle来终止任务调用。Timer简单易用,比较适合提供轻量级的计时器功能,可是对时效性很强的任务调度请用其它方法来实现(正如javadoc所述”Timer does not offer real-time guarantees: it schedules tasks using the Object.wait(long) method”)。
原文地址:http://shuaihong.blog.chinabyte.com/2010/03/24/33/