Timer TimerTask CountDown 计时器 API

Posted 白乾涛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Timer TimerTask CountDown 计时器 API相关的知识,希望对你有一定的参考价值。

Timer 计时器

一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。
默认情况下,任务执行线程并不作为守护线程来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。
如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。

此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。
此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。
实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。
实现注意事项:所有构造方法都启动计时器线程。

构造方法

  • Timer()     创建一个新计时器。
  • Timer(String name)     创建一个新计时器,其相关的线程具有指定的名称
  • Timer(boolean isDaemon)     创建一个新计时器,可以指定其相关的线程作为守护程序运行。
  • Timer(String name, boolean isDaemon)     创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。  

公共方法

  • void cancel()     终止此计时器,丢弃所有当前已安排的任务。
    • 这不会干扰当前正在执行的任务(如果存在)。
    • 一旦终止了计时器,那么它的执行线程也会终止,并且无法根据它安排更多的任务。
    • 注意,在此计时器调用的计时器任务的 run 方法内调用此方法,就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务。
    • 可以重复调用此方法,但是第二次和后续调用无效。
  • int purge()     从此计时器的任务队列中移除所有已取消的任务。
  • void schedule(TimerTask task, long delay)     t安排在指定延迟后执行指定的任务。ask - 所要安排的任务,delay - 执行任务前的延迟时间(毫秒)。
  • void schedule(TimerTask task, Date time)     安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。
  • void schedule(TimerTask task, long delay, long period)     安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
    • 固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
    • 固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。
  • void schedule(TimerTask task, Date firstTime, long period)     安排指定的任务在指定的时间开始进行重复的固定延迟执行。
  • void scheduleAtFixedRate(TimerTask task, long delay, long period)     安排指定的任务在指定的延迟后开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
    • 固定速率执行中,根据已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。从长远来看,执行的频率将正好是指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
    • 固定速率执行适用于那些对绝对时间敏感的重复执行活动,如每小时准点打钟报时,或者在每天的特定时间运行已安排的维护活动。它还适用于那些完成固定次数执行的总计时间很重要的重复活动,如倒计时的计时器,每秒钟滴答一次,共 10 秒钟。最后,固定速率执行适用于安排多个重复执行的计时器任务,这些任务相互之间必须保持同步。
  • void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)     安排指定的任务在指定的时间开始进行重复的固定速率执行。

TimerTask 计时任务

所有已实现的接口:Runnable
由 Timer 安排为一次执行或重复执行的任务。

API

  • 构造方法 protected TimerTask()    创建一个新的计时器任务。  
  • boolean cancel()   取消此计时器任务。
    • 如果任务安排为一次执行且还未运行,或者尚未安排,则永远不会运行。如果任务安排为重复执行,则永远不会运行。(如果发生此调用时任务正在运行,则任务将运行完,但永远不会运行。)
    • 注意,从重复的计时器任务的 run 方法中调用此方法绝对保证计时器任务不会再运行。
    • 此方法可以反复调用;第二次和以后的调用无效。
    • 返回:如果此任务安排为一次执行且尚未运行,或者此任务安排为重复执行,则返回 true。如果此任务安排为一次执行且已经运行,或者此任务尚未安排,或者此任务已经取消,则返回 false。(一般来说,如果此方法不允许发生一个或多个已安排执行,则返回 true。)
  • abstract  void run()    此计时器任务要执行的操作。
  • long scheduledExecutionTime()   返回此任务最近实际执行的已安排执行时间。

CountDownTimer 倒计时器

Schedule安排、时刻、清单 a countdown until a time in the future, with regular规律的 notifications on intervals间隔 along the way沿途、过程. Example of showing a 30 second countdown in a text field:
@BindView(R.id.send) Button send;//发送验证码

CountDownTimer timer = new CountDownTimer(60000, 1000) {
	@Override
	public void onTick(long millisUntilFinished) {
	    send.setText(time + "S");
	}
	@Override
	public void onFinish() {
		send.setEnabled(true);
		send.setText("重新发送");
	}
};
The calls to onTick(long) are synchronized to this object so that one call to onTick(long) won‘t ever occur before the previous callback is complete. This is only relevant有意义的 when the implementation of onTick(long) takes an amount of大量的 time to execute执行 that is significant compared to the countdown interval.

API

  • CountDownTimer(long millisInFuture, long countDownInterval)
    • millisInFuture: The number of millis in the future from the call to start() until the countdown is done and onFinish() is called.
    • countDownInterval: The interval along the way to receive onTick(long) callbacks.
  • final void cancel():Cancel the countdown.
  • abstract void onFinish():Callback fired when the time is up.
  • abstract void onTick(long millisUntilFinished):Callback fired on regular interval.
    • millisUntilFinished: The amount of time until finished.
  • final CountDownTimer start():Start the countdown.































以上是关于Timer TimerTask CountDown 计时器 API的主要内容,如果未能解决你的问题,请参考以下文章

java的Timer和TimerTask

Timer和TimerTask的使用

Java并发编程:Timer和TimerTask

Timer和TimerTask(转载)

Java Timer和TimerTask的使用

Timer与TimerTask的真正原理&使用介绍