public class Timer extends Object
对应于每个Timer对象是单个后台线程来执行所有的定时器的任务顺序。定时器任务应该快速完成。如果定时器任务需要长时间才能完成,这“猪”计时器的任务执行线程。这可以,反过来,延迟执行的后续任务,这可能会“一堆起来”,并在快速连续执行时(如果)违规的任务最终完成。
过去的生活对Timer对象消失和所有优秀的任务已经完成执行后,计时器的任务执行线程终止优雅(成为受垃圾收集)。然而,这可以采取任意长时间发生。默认情况下,任务的执行线程不运行作为一个守护线程,因此能够保持应用程序终止。如果调用方希望终止计时器的任务执行线程迅速,调用者应该调用定时器的cancel方法。
如果计时器的任务执行线程终止意外,例如,因为其stop方法被调用时,任何进一步的尝试,在定时器任务进度将导致IllegalStateException,如定时器的cancel方法被调用。
这个类是线程安全的:多个线程可以共享一个单一的Timer对象而不需要外部同步。
这类不提供实时担保任务使用Object.wait(long)方法。
java 5介绍了java.util.concurrent
包和一个并发事业其中的ScheduledThreadPoolExecutor
是重复执行的任务在一个给定的速率或延迟一个线程池。它是有效的Timer
/ TimerTask
组合了一个多功能的替代,因为它允许多个服务线程,接受不同的时间单位,而不需要子类化TimerTask
(只是实现了Runnable
)。一个线程配置ScheduledThreadPoolExecutor
就相当于Timer
。
执行说明:这个类的规模,以大量的并发计划的任务(数千应该没有问题)。在内部,它使用一个二进制堆来表示它的任务队列,所以要安排一个任务的成本是O(日志n),其中n是并发计划的任务的数目。
实现说明:所有的构造函数都启动一个定时器线程。
TimerTask
,
Object.wait(long)
Constructor and Description |
---|
Timer()
创建一个新的计时器。
|
Timer(boolean isDaemon)
创建一个新的定时器的线程可以被指定
run as a daemon。
|
Timer(String name)
创建一个新的计时器,该计时器的关联线程具有指定的名称。
|
Timer(String name, boolean isDaemon)
创建一个新的定时器的相关线程指定名称,可以指定
run as a daemon。
|
Modifier and Type | Method and Description |
---|---|
void |
cancel()
终止此计时器,丢弃任何当前计划的任务。
|
int |
purge()
从这个计时器的任务队列中移除所有已取消的任务。
|
void |
schedule(TimerTask task, Date time)
在指定的时间计划执行指定的任务。
|
void |
schedule(TimerTask task, Date firstTime, long period)
计划重复固定延迟执行指定的任务,开始在指定的时间。
|
void |
schedule(TimerTask task, long delay)
指定在指定的延迟后执行指定的任务的时间。
|
void |
schedule(TimerTask task, long delay, long period)
计划重复固定延迟执行指定的任务,在指定的延迟后开始。
|
void |
scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
计划重复固定利率执行指定的任务,开始在指定的时间。
|
void |
scheduleAtFixedRate(TimerTask task, long delay, long period)
计划重复固定利率执行指定的任务,在指定的延迟后开始。
|
public Timer()
public Timer(boolean isDaemon)
isDaemon
-如果关联的线程应该作为守护进程运行。
public Timer(String name)
name
-关联线程的名称
NullPointerException
-如果
name
是空的
public Timer(String name, boolean isDaemon)
name
-关联线程的名称
isDaemon
-如果关联的线程应该作为守护进程运行
NullPointerException
-如果
name
是空的
public void schedule(TimerTask task, long delay)
task
任务被调度。
delay
延迟毫秒之前要执行的任务是。
IllegalArgumentException
-如果
delay是负的,或
delay + System.currentTimeMillis()是负的。
IllegalStateException
如果任务已经安排或取消,取消或定时器,定时器线程终止。
NullPointerException
-如果
task
是空的
public void schedule(TimerTask task, Date time)
task
任务被调度。
time
时要执行的任务。
IllegalArgumentException
-如果
time.getTime()是负的。
IllegalStateException
如果任务已经安排或取消,取消或定时器,定时器线程终止。
NullPointerException
-如果
task
或
time
是空的
public void schedule(TimerTask task, long delay, long period)
在固定的延迟执行中,每个执行计划相对于先前执行的实际执行时间。如果一个执行被延迟了任何原因(如垃圾收集或其他背景活动),随后的执行将被延迟以及。从长远来看,执行的频率一般会略低于指定周期的倒数(假设系统时钟的基本Object.wait(long)准确)。
固定延迟执行是适当的经常性活动,需要“平滑”,换句话说,它是适当的活动,它更重要的是保持频率准确,在短期内比从长远来看。这包括大多数动画任务,例如在规则的时间间隔闪烁光标。它还包括任务,其中定期活动是对人类的输入进行响应,如自动重复一个字符,只要一个键被按住。
task
任务被调度。
delay
延迟毫秒之前要执行的任务是。
period
在连续执行任务之间的毫秒时间。
IllegalArgumentException
-如果
delay < 0
,或
delay + System.currentTimeMillis() < 0
,或
period <= 0
IllegalStateException
如果任务已经安排或取消,取消或定时器,定时器线程终止。
NullPointerException
-如果
task
是空的
public void schedule(TimerTask task, Date firstTime, long period)
在固定的延迟执行中,每个执行计划相对于先前执行的实际执行时间。如果一个执行被延迟了任何原因(如垃圾收集或其他背景活动),随后的执行将被延迟以及。从长远来看,执行的频率一般会略低于指定周期的倒数(假设系统时钟的基本Object.wait(long)准确)。由于上述的结果,如果预定的第一次是在过去,它是定于立即执行。
固定延迟执行是适当的经常性活动,需要“平滑”,换句话说,它是适当的活动,它更重要的是保持频率准确,在短期内比从长远来看。这包括大多数动画任务,例如在规则的时间间隔闪烁光标。它还包括任务,其中定期活动是对人类的输入进行响应,如自动重复一个字符,只要一个键被按住。
task
任务被调度。
firstTime
-第一次的任务是要执行的。
period
在连续执行任务之间的毫秒时间。
IllegalArgumentException
-如果
firstTime.getTime() < 0
,或
period <= 0
IllegalStateException
如果任务已经安排或取消,取消或定时器,定时器线程终止。
NullPointerException
-如果
task
或
firstTime
是空的
public void scheduleAtFixedRate(TimerTask task, long delay, long period)
在固定速率执行中,每个执行计划相对于初始执行的预定执行时间。如果一个执行延迟的任何理由(如垃圾收集或其他背景的活动),两个或两个以上的执行将在快速连续的“追赶发生。“从长远来看,执行的频率将是指定周期的倒数(假设系统时钟的基本Object.wait(long)准确)。
固定利率执行适当的经常性活动是绝对的时间敏感,如响钟每小时运行,或定期维护每天在特定的时间。它也适用于经常性的活动,总时间来执行固定数量的执行是很重要的,如一个倒计时器,每秒钟一次,连续十秒。最后,固定速率的执行是适当的调度多个重复定时器任务,必须保持同步的相互尊重。
task
任务被调度。
delay
延迟毫秒之前要执行的任务是。
period
在连续执行任务之间的毫秒时间。
IllegalArgumentException
-如果
delay < 0
,或
delay + System.currentTimeMillis() < 0
,或
period <= 0
IllegalStateException
如果任务已经安排或取消,取消或定时器,定时器线程终止。
NullPointerException
-如果
task
是空的
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
在固定速率执行中,每个执行计划相对于初始执行的预定执行时间。如果一个执行延迟的任何理由(如垃圾收集或其他背景的活动),两个或两个以上的执行将在快速连续的“追赶发生。“从长远来看,执行的频率将是指定周期的倒数(假设系统时钟的基本Object.wait(long)准确)。由于上述的结果,如果预定的第一次是在过去,那么任何“错过”的执行将被安排立即“赶上”执行。
固定利率执行适当的经常性活动是绝对的时间敏感,如响钟每小时运行,或定期维护每天在特定的时间。它也适用于经常性的活动,总时间来执行固定数量的执行是很重要的,如一个倒计时器,每秒钟一次,连续十秒。最后,固定速率的执行是适当的调度多个重复定时器任务,必须保持同步的相互尊重。
task
任务被调度。
firstTime
-第一次的任务是要执行的。
period
在连续执行任务之间的毫秒时间。
IllegalArgumentException
-如果
firstTime.getTime() < 0
或
period <= 0
IllegalStateException
如果任务已经安排或取消,取消或定时器,定时器线程终止。
NullPointerException
-如果
task
或
firstTime
是空的
public void cancel()
请注意,调用此方法从内部运行的计时器任务的方法,由这个计时器调用绝对保证,正在执行的任务执行是由这个定时器将永远执行的最后一个任务执行。
此方法可以被重复调用;第二个和随后的调用没有影响。
public int purge()
大多数程序将不需要调用此方法。它是专为使用的罕见的应用程序,取消了大量的任务。调用此方法的交易时间为空间:该方法的运行时间可能是成正比的n + C日志n,其中n是在队列中的任务的数量和C是取消任务的数量。
请注意,它是允许的调用这个方法从一一任务计划在这个定时器。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.