社区
Java SE
帖子详情
如何让程序在指定时间执行任务
power_quest
2005-10-14 03:53:24
如何让程序在指定时间执行任务,比如说让程序每天的16点钟访问一次文件。谢谢。
...全文
656
5
打赏
收藏
如何让程序在指定时间执行任务
如何让程序在指定时间执行任务,比如说让程序每天的16点钟访问一次文件。谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
timeblink
2006-02-10
打赏
举报
回复
学习
jack1219
2005-10-14
打赏
举报
回复
能问一下上面的代码是哪里来的啊~
谢谢
jack1219
2005-10-14
打赏
举报
回复
顶楼上
kenMoxi
2005-10-14
打赏
举报
回复
如何在Web工程中实现任务计划调度
下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。
我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器,示例代码如下所示(为考虑篇幅,仅提供部分代码供读者参考):
1. private java.util.Timer timer = null;
2. public void contextInitialized(ServletContextEvent event) {
3. timer = new java.util.Timer(true);
4. event.getServletContext().log("定时器已启动");
5. timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);
6. event.getServletContext().log("已经添加任务调度表");
7. }
8. public void contextDestroyed(ServletContextEvent event) {
9. timer.cancel();
10. event.getServletContext().log("定时器销毁");
11. }
以上代码中, timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000)这一行为定时器调度语句,其中MyTask是自定义需要被调度的执行任务(在我的财政数据中心项目中就是报表计算引擎入口),从java.util.TimerTask继承,下面会重点讲述,第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟。其它代码相当简单,不再详细说明。
下面介绍MyTask的实现,上面的代码中看到了在构造MyTask时,传入了javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入,因此需要重载MyTask的构造函数(其父类java.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实现调度任务每24小时被执行一次,还需要判断一下时钟点,以常量C_SCHEDULE_HOUR表示(晚上12点,也即0点)。同时为防止24小时执行下来,任务还未执行完(当然,一般任务是没有这么长的),避免第二次又被调度以引起执行冲突,设置了当前是否正在执行的状态标志isRunning。示例代码如下所示:
1. private static final int C_SCHEDULE_HOUR = 0;
2. private static boolean isRunning = false;
3. private ServletContext context = null;
4. public MyTask(ServletContext context) {
5. this.context = context;
6. }
7. public void run() {
8. Calendar cal = Calendar.getInstance();
9. if (!isRunning) {
10. if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
11. isRunning = true;
12. context.log("开始执行指定任务");
13.
14. //TODO 添加自定义的详细任务,以下只是示例
15. int i = 0;
16. while (i++ < 10) {
17. context.log("已完成任务的" + i + "/" + 10);
18. }
19.
20. isRunning = false;
21. context.log("指定任务执行结束");
22. }
23. } else {
24. context.log("上一次任务执行还未结束");
25. }
26. }
上面代码中“//TODO……”之下四行是真正被调度执行的演示代码(在我的财政数据中心项目中就是报表计算过程),您可以换成自己希望执行的语句。
到这儿,ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListener部署到您的Web工程中去,在您工程的web.xml配置文件中加入如下三行:
<listener>
<listener-class>com.test.ContextListener</listener-class>
</listener>
当然,上面的com.test得换成您自己的包名了。保存web.xml文件后,把工程打包部署到Tomcat中即可。任务会在每晚12点至凌晨1点之间被执行,上面的代码会在Tomcat的日志文件中记录如下:
2003-12-05 0:21:39 开始执行指定任务
2003-12-05 0:21:39 已完成任务的1/10
……
2003-12-05 0:21:39 已完成任务的10/10
2003-12-05 0:21:39 指定任务执行结束
clever52
2005-10-14
打赏
举报
回复
用线程
【原创】定时打开
指定
程序
的小工具
由于最近工作中经常用到定时
执行
一些
程序
,以前都是用计划
任务
,但是想想何不自己开发一个定时
执行
程序
的小软件呢,用了一晚上的功夫开发完成,功能比较简单。可以定时
执行
多个
程序
。可以支持开机自启动。设定好之后...
Java
指定
时间
执行
任务
2.第一次
执行
任务
时可以
指定
你想要的delay
时间
在实现时,Timer类可以调度
任务
,TimerTask则是通过在run()方法里实现具体
任务
。 Timer实例可以调度多
任务
,它是线程安全的。 当Timer的构造器被调用时,它创建了一个...
动态定时
任务
执行
,schedule基于定时
任务
线程池实现
指定
时间
运行
程序
动态定时
任务
执行
,schedule基于定时
任务
线程池实现
指定
时间
运行
程序
linux
指定
时间
执行
某
任务
,LINUX命令at-系统管理-在
指定
时间
执行
一个定时
任务
在
指定
时间
执行
一个
任务
at命令 用于在
指定
时间
执行
命令。at允许使用一套相当复杂的
指定
时间
的方法。它能够接受在当天的hh:mm(小时:分钟)式的
时间
指定
。假如该
时间
已过去,那么就放在第二天
执行
。当然也能够使用...
Java定时
任务
调度:精确控制
任务
执行
时间
通过使用Timer类或ScheduledExecutorService接口,我们可以...Timer类提供了一种简单的方式来安排未来的
任务
执行
,可以
指定
任务
在特定的
时间
点
执行
,也可以
指定
任务
在一段
时间
后
执行
。方法,可以
指定
任务
在5秒后
执行
。
Java SE
62,624
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章