前言基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行任务。
Timer
Timer定义A facility for threads to schedule tasks for future execution in a background thread. Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals.
有且仅有一个后台线程对多个业务线程进行定时定频率的调度
Timer构造方法Timer() 创建一个新计时器
Timer(boolean isDaemon) 创建一个新计时器,可以指定其相关的线程作为守护程序运行。isDaemon:如果应该将相关的线程作为守护程序运行,则为 true
Timer(String name) 创建一个新计时器,其相关的线程具有指定的名称
Timer(String name,boolean isDaemon)创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。name 相关线程的名称。isDaemon - 如果应该将相关的线程作为守护程序运行,则为 true。
调度方法 schedule的四种用法public void schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的 固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
demoschedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。
schedule(TimerTask task, Date firstTime, long period) 时间等于或超过fisrtTime是执行task,之后每隔period重复执行一次task。
schedule(TimerTask task, long delay) 等待delay毫秒后执行且仅执行一次task。
schedule(TimerTask task, long delay, long period) 等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task。
scheduleAtFixedRate
首次执行时间早于当前时间
schedule(TimerTask task, Date firstTime, long period)方法只能从当前时间开始执行,比如要当前时间是12:00:06,firstTime设为12:00:00,period设为2秒,那么schedule方法就不能执行firstTime到当前时间的三次task。
而scheduleAtFixedRate(TimerTask task, Date firstTime, long period)在如果第一次执行时间被delay了,随后的执行时间会按照上一次任务开始的时间进行计算,并且为了赶上进度会多次执行任务。在方法调用时会立刻执行三次task。
执行任务的时间超过执行任务的period
schedule(TimerTask task, long delay, long period)方法的下次执行时间是在上一次任务结束period后 开始执行下一次任务。而scheduleAtFixedRate是在上一次任务开始period后执行下一次task。存在并发性。
Timer的缺点
timer只有一个后台线程,管理并发任务存在缺馅;当一个task抛出异常时,其他的任务就不能执行了;不支持每周特定一天去执行任务。定时设置存在局限性。