定时器在线程中的应用很广泛,比如我们要在某个时间点执行一个特定的任务,或者规律性的重复执行某个任务,这个时候我们就需要使用定时器了。

  在java1.3版本之后我们可以使用Timer和TimerTask来构建自己的定时应用。Timer能够在一个后台线程中调度TimerTask用于后续执行,可以单次执行或者规律性的重复执行。为了描述Timer的应用,我们看一个实例:

  

java一个项目的定时器要不放一起 java定时器是单线程吗_后端

  例子中创建了一个Timer对象,创建了一个TimerTask实现的匿名类,并实现其中的run方法,然后调用timer的schedule方法完成调度。除了可以执行一次调用,还可以使用Timer完成规律性的调用,看下面的实例:

  

java一个项目的定时器要不放一起 java定时器是单线程吗_java_02

  Timer对象调用了schedule方法,以1秒为周期循环调用执行run方法。

  Java系统为Timer提供了4个构造器:1.Timer()创建一个非守护线程的定时器。2.Timer(boolean isDaemon)如果为参数isDaemon设置true,则会创建一个守护线程的定时器。3.Timer(String name)创建一个名字是name的非守护线程的定时器。4.Timer(String name,boolean isDaemon)可以定义一个指定名称且可以是守护线程的定时器。

  Timer中定义了一系列重载的schedule方法来进行任务调度,比如schedule(TimerTask task,Date time)在某个时间点time完成任务调度;schedule(TimerTask task,Date firstTime,long period)在firstTime开始执行,然后以固定的时间间隔(period)来执行任务调度;schedule(TimerTask task,long delay)在延迟delay毫秒之后任务开始调度;schedule(TimerTask task,long delay,long period)任务在延迟一段时间(delay)后以固定时间间隔(period)执行任务调度。其中还有用于取消任务调度的cancel方法以及移除所有被取消任务的purge方法,大家可以参考Timer的api文档进行详细了解。

  当最后一条定时任务执行结束后,该定时器的任务线程将会"优雅"地终止,所谓"优雅"就是结束的过程会在不定的时长里发生。如果要快速终止一个定时器的执行线程,应该使用cancel方法。