Timer和时间调度

Posted 饭小胖

tags:

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

  Timer作为JDK提供的util工具,不太适合作为周期调度任务,只适合简单的定时操作(按照一定时间频率出发任务),在java的领域解决方案中,Quartz无疑是翘楚。

  Timer的调度方法有:

public void schedule(TimerTask task, long delay) {
if (delay < 0)
throw new IllegalArgumentException("Negative delay.");
sched(task, System.currentTimeMillis()+delay, 0);
}  
public void schedule(TimerTask task, Date time) {
sched(task, time.getTime(), 0);
}
  
  等一些主要以时间间隔为主的任务,另外大家不要误会第二个构造方法有什么特别,其实内部也是通过计算出和现在的间隔毫秒数为主的调度,用到的原理也很简单,维护一个queue的实现了TimerTask的任务队列,然后通过轮询mainloop方法,不断执行其中的任务,而执行方式熟悉并发的同学都知道,用的是Object的wait(long millionseconds)方法。

  因此结论:不要试图更改系统时间接近Date time这个时间使得任务运行。

以上是关于Timer和时间调度的主要内容,如果未能解决你的问题,请参考以下文章

任务调度——Timer的替代品ScheduledExecutorService简单介绍

Timer与ScheduledThreadPoolExecutor

Java Timer 调度器内存回收

JAVA定时任务调度之Timer入门详解

Spring任务调度之Timer

Java的定时调度