java.util下的Timer,TimerTask和quartz的比较(1)

文章作者 100test 发表时间 2007:03:14 16:31:26
来源 100Test.Com百考试题网


Java 中已经有一个 timer 类可以用来进行执行计划,定时任务。我们所要做的只是继承 java.util.TimerTask 类。如下所示:

package com.yourcompany.scheduling;

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class ReportGenerator extends TimerTask {

public void run() {

System.out.println("Generating report");

//TODO generate report

}

}

class MainApplication {

public static void main(String[] args) {

Timer timer new Timer();

Calendar date = Calendar.getInstance();

date.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);

date.set(Calendar.HOUR, 0);

date.set(Calendar.MINUTE, 0);

date.set(Calendar.SECOND, 0);

date.set(Calendar.MILLISECOND, 0);

// Schedule to run every Sunday in midnight

timer.schedule(new ReportGenerator(), // TimerTask

date.getTime(), // Timer

1000 * 60 * 60 * 24 * 7 // delay)

};

这里有几个问题,我们的类继承了TimerTask ,而timerTask 也是实现了 java.lang.Runnable 接口。我们所要做的只是在我们自己的类里重置 run() 方法。所以我们的TimerTask类其实是一种线程,但线程的调度往往不是按照我们希望来实现的,因为一些垃圾收集等原因,我们计划的时间点,却没有执行必要的任务。这样会产生一些问题。虽然,Timer 类也提供了scheduleAtFixedRate() 方法用来在垃圾收集后能够快速的追上任务进度,但这个不一定是我们所需要的。特别是在 一些 J2EE 服务器上 Timer 是无法控制的,因为它不在容器的权责范围内。另外的,这个任务调度也缺乏一些企业级所需要的 特殊 日期定制的功能,以及修改,查找任务的功能。


相关文章


Java程序设计知识与技能(一)
java.util下的Timer,TimerTask和quartz的比较(1)
java.util下的Timer,TimerTask和quartz的比较(3)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛