Java应用程序中定时执行任务

Java应用程序中定时执行任务

ID:40456603

大小:140.50 KB

页数:24页

时间:2019-08-03

Java应用程序中定时执行任务_第1页
Java应用程序中定时执行任务_第2页
Java应用程序中定时执行任务_第3页
Java应用程序中定时执行任务_第4页
Java应用程序中定时执行任务_第5页
资源描述:

《Java应用程序中定时执行任务》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、所有类型的Java应用程序一般都需要计划重复执行的任务。企业应用程序需要计划每日的日志或者晚间批处理过程。一个J2SE或者J2ME日历应用程序需要根据用户的约定计划闹铃时间。不过,标准的调度类Timer和TimerTask没有足够的灵活性,无法支持通常需要的计划任务类型。在本文中,Java开发人员TomWhite向您展示了如何构建一个简单通用的计划框架,以用于执行任意复杂的计划任务。我将把java.util.Timer和java.util.TimerTask统称为Java计时器框架,它们使程序员可以很容易地计划简单的任务(注意这些类也可用于J2ME中)。在Java2SDK,Stan

2、dardEdition,Version1.3中引入这个框架之前,开发人员必须编写自己的调度程序,这需要花费很大精力来处理线程和复杂的Object.wait()方法。不过,Java计时器框架没有足够的能力来满足许多应用程序的计划要求。甚至一项需要在每天同一时间重复执行的任务,也不能直接使用Timer来计划,因为在夏令时开始和结束时会出现时间跳跃。本文展示了一个通用的Timer和TimerTask计划框架,从而允许更灵活的计划任务。这个框架非常简单——它包括两个类和一个接口——并且容易掌握。如果您习惯于使用Java定时器框架,那么您应该可以很快地掌握这个计划框架。计划单次任务计划框架建

3、立在Java定时器框架类的基础之上。因此,在解释如何使用计划框架以及如何实现它之前,我们将首先看看如何用这些类进行计划。想像一个煮蛋计时器,在数分钟之后(这时蛋煮好了)它会发出声音提醒您。清单1中的代码构成了一个简单的煮蛋计时器的基本结构,它用Java语言编写:清单1.EggTimer类packageorg.tiling.scheduling.examples;importjava.util.Timer;importjava.util.TimerTask;publicclassEggTimer{privatefinalTimertimer=newTimer();privatefin

4、alintminutes;publicEggTimer(intminutes){this.minutes=minutes;}publicvoidstart(){timer.schedule(newTimerTask(){publicvoidrun(){playSound();timer.cancel();}privatevoidplaySound(){System.out.println("Youreggisready!");//Startanewthreadtoplayasound...}},minutes*60*1000);}publicstaticvoidmain(Strin

5、g[]args){EggTimereggTimer=newEggTimer(2);eggTimer.start();}}EggTimer实例拥有一个Timer实例,用于提供必要的计划。用start()方法启动煮蛋计时器后,它就计划了一个TimerTask,在指定的分钟数之后执行。时间到了,Timer就在后台调用TimerTask的start()方法,这会使它发出声音。在取消计时器后这个应用程序就会中止。计划重复执行的任务通过指定一个固定的执行频率或者固定的执行时间间隔,Timer可以对重复执行的任务进行计划。不过,有许多应用程序要求更复杂的计划。例如,每天清晨在同一时间发出叫醒铃声

6、的闹钟不能简单地使用固定的计划频率86400000毫秒(24小时),因为在钟拨快或者拨慢(如果您的时区使用夏令时)的那些天里,叫醒可能过晚或者过早。解决方案是使用日历算法计算每日事件下一次计划发生的时间。而这正是计划框架所支持的。考虑清单2中的AlarmClock实现:清单2.AlarmClock类packageorg.tiling.scheduling.examples;importjava.text.SimpleDateFormat;importjava.util.Date;importorg.tiling.scheduling.Scheduler;importorg.tili

7、ng.scheduling.SchedulerTask;importorg.tiling.scheduling.examples.iterators.DailyIterator;publicclassAlarmClock{privatefinalSchedulerscheduler=newScheduler();privatefinalSimpleDateFormatdateFormat=newSimpleDateFormat("ddMMMyyyyHH:mm:ss.S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。