快速业务通道

在 Java 应用程序中计划重复执行的任务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
生的时间。而这正是计划框架所支持的。考虑清单 2 中的 AlarmClock 实现(有关计划框架的源代码以及包含这个框架和例子的 JAR 文件,请参阅 参 考资料):

清单 2. AlarmClock 类

package org.tiling.scheduling.examples; import java.text.SimpleDateFormat; import java.util.Date; import org.tiling.scheduling.Scheduler; import org.tiling.scheduling.SchedulerTask; import org.tiling.scheduling.examples.iterators.DailyIterator; public class AlarmClock {    private final Scheduler scheduler = new Scheduler();    private final SimpleDateFormat dateFormat =      new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");    private final int hourOfDay, minute, second;    public AlarmClock(int hourOfDay, int minute, int second) {      this.hourOfDay = hourOfDay;      this.minute = minute;      this.second = second;    }    public void start() {      scheduler.schedule(new SchedulerTask() {        public void run() {          soundAlarm();        }        private void soundAlarm() {          System.out.println("Wake up! " +            "It''s " + dateFormat.format(new Date()));          // Start a new thread to sound an alarm...        }      }, new DailyIterator(hourOfDay, minute, second));    }    public static void main(String[] args) {      AlarmClock alarmClock = new AlarmClock(7, 0, 0);      alarmClock.start();    } }

注意这段代码与煮蛋计时器应用程序非常相似。AlarmClock 实例拥有一个 Scheduler ( 而不是 Timer)实例,用于提供必要的计划。启动后,这个闹钟对 SchedulerTask (而不是 TimerTask)进行调度用以发出报警声。这个闹钟不是计划一个任务在固定的延迟时间后执行 ,而是用 DailyIterator 类描述其计划。在这里,它只是计划任务在每天上午 7:00 执行。 下面是一个正常运行情况下的输出:

Wake up! It''s 24 Aug 2003 07:00:00.023 Wake up! It''s 25 Aug 2003 07:00:00.001 Wake up! It''s 26 Aug 2003 07:00:00.058 Wake up! It''s 27 Aug 2003 07:00:00.015 Wake up! It''s 28 Aug 2003 07:00:00.002 ...

在 Java 应用程序中计划重复执行的任务(3)

时间:2011-04-19 IBM Tom White

DailyIterator 实现了 ScheduleIterator,这是一个将 SchedulerTask 的计划执行时间 指定为一系列 java.util.Date 对象的接口。然后 next() 方法按时间先后顺序迭代 Date 对象。返回值 null 会使任务取消(即它再也不会运行)―― 这样的话,试图再次计划将会 抛出一个异常。清单 3 包含 ScheduleIterator 接口:

清单 3. ScheduleIterator 接口

package org.tiling.scheduling; import java.util.Date; public interface ScheduleIterator {    public Date next(); }

DailyIterator 的 next() 方法返回表示每天同一时间(上午 7:00)的 Date 对象,如 清单 4 所示。所以,如果对新构建的 next() 类调用 next(),那么将会得到传递给构造函 数的那个日期当天或者后面一天的 7:00 AM。再次调用 next() 会返回后一天的 7:00 AM, 如此重复。为了实现这种行为,DailyIterator 使用了 java.util.Calendar 实例。构造函 数会在日历中加上一天,对日历的这种设置使得第一次调用 next() 会返回正确的 Date。注 意代码没有明确地提到夏令时修正,因为 Calendar 实现(在本例中是 Gr

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号