转自:http://blog.sina.com.cn/s/blog_69e2a1980100jw3l.html
可参考:http://www.jingningedu.com/manage/java_api/java/util/Timer.html
public class Timer extends Object
1.一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
2.与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述令人讨厌的任务最终完成时才能够被快速连续地执行。
3.对 Timer 对象最后的引用完成后,并且所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用方想要快速终止计时器的任务执行线程,那么调用方应该调用计时器的 cancel 方法。
4.如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。
5.此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。
6.此类不 提供实时保证:它使用 Object.wait(long) 方法来安排任务。
7.实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。
实现注意事项:所有构造方法都启动计时器线程。
可另外参见:TimerTask
, Object.wait(long)
一.构造方法
Timer()
Timer(boolean
Timer(String
Timer(String
二.方法
void cancel()
int purge()
void schedule(TimerTask
void schedule(TimerTask
void schedule(TimerTask
void schedule(TimerTask
void scheduleAtFixedRate(TimerTask
void scheduleAtFixedRate(TimerTask
注意:上面的方法中,延迟和时间的单位均为毫秒(ms)。
从类 java.lang.Object 继承的方法:clone, equals, finalize, getClass, hashCode, notify,notifyAll, toString, wait, wait, wait
三.方法详细信息
scheduleAtFixedRate
public void scheduleAtFixedRate(TimerTasktask, long delay, long period)
1.安排指定的任务在指定的延迟后开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
2.在固定速率执行中,根据已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他背景活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。从长远来看,执行的频率将正好是指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
3.固定速率执行适用于那些对绝对 时间敏感的重复执行活动,如每小时准点打钟报时,或者在每天的特定时间运行已安排的维护活动。它还适用于那些完成固定次数执行的总计时间很重要的重复活动,如倒计时的计时器,每秒钟滴答一次,共 10 秒钟。最后,固定速率执行适用于安排多个重复执行的计时器任务,这些任务相互之间必须保持同步。
参数:
task
- 所要安排的任务。
delay
- 执行任务前的延迟时间,单位是毫秒。
period
- 执行各后续任务之间的时间间隔,单位是毫秒。
抛出:
IllegalArgumentException
- 如果 delay 是负数,或者 delay + System.currentTimeMillis() 是负数。
IllegalStateException
- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。