快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

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

时间:2011-04-19 IBM Tom White

所有类型的 Java 应用程序一般都需要计划重复执行的任务。企业应用程序需要计划每日 的日志或者晚间批处理过程。一个 J2SE 或者 J2ME 日历应用程序需要根据用户的约定计划 闹铃时间。不过,标准的调度类 Timer 和 TimerTask 没有足够的灵活性,无法支持通常需 要的计划任务类型。在本文中,Java 开发人员 Tom White 向您展示了如何构建一个简单通 用的计划框架,以用于执行任意复杂的计划任务。

我将把 java.util.Timer 和 java.util.TimerTask 统称为 Java 计时器框架,它们使程 序员可以很容易地计划简单的任务(注意这些类也可用于 J2ME 中)。在 Java 2 SDK, Standard Edition, Version 1.3 中引入这个框架之前,开发人员必须编写自己的调度程序 ,这需要花费很大精力来处理线程和复杂的 Object.wait() 方法。不过,Java 计时器框架 没有足够的能力来满足许多应用程序的计划要求。甚至一项需要在每天同一时间重复执行的 任务,也不能直接使用 Timer 来计划,因为在夏令时开始和结束时会出现时间跳跃。

本文展示了一个通用的 Timer 和 TimerTask 计划框架,从而允许更灵活的计划任务。这 个框架非常简单 ―― 它包括两个类和一个接口 ―― 并且容易掌握。如果您习惯于使用 Java 定时器框架,那么您应该可以很快地掌握这个计划框架(有关 Java 定时器框架的更多 信息,请参阅 参考资料)。

计划单次任务

计划框架建立在 Java 定时器框架类的基础之上。因此,在解释如何使用计划框架以及如 何实现它之前,我们将首先看看如何用这些类进行计划。

想像一个煮蛋计时器,在数分钟之后(这时蛋煮好了)它会发出声音提醒您。清单 1 中 的代码构成了一个简单的煮蛋计时器的基本结构,它用 Java 语言编写:

清单 1. EggTimer 类

package org.tiling.scheduling.examples; import java.util.Timer; import java.util.TimerTask; public class EggTimer {    private final Timer timer = new Timer();    private final int minutes;    public EggTimer(int minutes) {      this.minutes = minutes;    }    public void start() {      timer.schedule(new TimerTask() {        public void run() {          playSound();          timer.cancel();        }        private void playSound() {          System.out.println("Your egg is ready!");          // Start a new thread to play a sound...        }      }, minutes * 60 * 1000);    }    public static void main(String[] args) {      EggTimer eggTimer = new EggTimer(2);      eggTimer.start();    } }

EggTimer 实例拥有一个 Timer 实例,用于提供必要的计划。用 start() 方法启动煮蛋 计时器后,它就计划了一个 TimerTask,在指定的分钟数之后执行。时间到了,Timer 就在 后台调用 TimerTask 的 start() 方法,这会使它发出声音。在取消计时器后这个应用程序 就会中止。

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

时间:2011-04-19 IBM Tom White

计划重复执行的任务

通过指定一个固定的执行频率或者固定的执行时间间隔,Timer 可以对重复执行的任务进 行计划。不过,有许多应用程序要求更复杂的计划。例如,每天清晨在同一时间发出叫醒铃 声的闹钟不能简单地使用固定的计划频率 86400000 毫秒(24 小时),因为在钟拨快或者拨 慢(如果您的时区使用夏令时)的那些天里,叫醒可能过晚或者过早。解决方案是使用日历 算法计算每日事件下一次计划发

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号