WEB开发网
开发学院WEB开发Jsp java.util下的Timer,TimerTask和quartz的比较 阅读

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

 2008-01-05 08:29:24 来源:WEB开发网   
核心提示: java 中已经有一个 timer 类可以用来进行执行计划,定时任务,java.util下的Timer,TimerTask和quartz的比较,我们所要做的只是继续 java.util.TimerTask 类,如下所示: package com.yourcompany.scheduling; import ja

   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 是无法控制的,因为它不在容器的权责范围内。另外的,这个任务调度也缺乏一些企业级所需要的 非凡 日期定制的功能,以及修改,查找任务的功能。

   这里我们要介绍的是一个开源项目:Quartz .

   Quartz 定义了两种 基本接口 Job 和 Trigger . 看名字也就知道,我们的任务必须实现 Job, 我们的时间触发器定义在 Trigger 内。 看一个例子也许能更快的了解他的使用方法:package com.yourcompany.scheduling;

   import org.quartz.*;

   public class QuartzReport implements Job {

   public void execute(JobExecutionContext cntxt) //必须实现的方法

   throws JobExecutionException {

   System.out.println("Generating report - " +

   cntxt.getJobDetail().getJobDataMap().get("type"));

   //TODO Generate report

   }

   public static void main(String[] args) {

   try {

   SchedulerFactory schedFact


Tags:java util Timer

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接