如何实现在每小时的整点执行一个任务
准备用Java的Timer,让其在每个小时的整点运行一个任务.由于是个新手,哪位大侠能否给个列子 问题点数:100、回复次数:29Top
1 楼tawalisa()回复于 2006-04-29 11:48:40 得分 0
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
public static void main(String[] args) {
test2 test = new test2();
Timer time = new Timer();
time.scheduleAtFixedRate(test.new RunTimer(),5000,200);
time.schedule(test.new RunTimer(),5000,1000);
}
class RunTimer extends TimerTask {
int i = 0;
public void run() {
System.out.println("" + (i++));
}
}
}
Top
2 楼ygzeng()回复于 2006-04-29 13:01:40 得分 0
5000代表delay的时间,如何确定delay5000毫秒之后就是整点呢?Top
3 楼xueyi0108(西紅柿炒自己^ǒ^)回复于 2006-04-29 13:02:17 得分 0
mark
Top
4 楼PoemCode(诗意代码)回复于 2006-04-29 13:04:33 得分 0
学习Top
5 楼yunqing1028(-_-)回复于 2006-04-29 13:04:53 得分 0
用quartz吧
你这个问题绝对是小菜Top
6 楼zclgod(春风化雷)回复于 2006-04-29 13:07:44 得分 0
多线程Top
7 楼ygzeng()回复于 2006-04-29 14:31:41 得分 0
我后来是通过这种方法来做的,不知道行不行(给我一个确认答复也给分):
Calendar CurrentTime=Calendar.getInstance();
CurrentTime.set(Calendar.HOUR,0);
CurrentTime.set(Calendar.MINUTE,0);
CurrentTime.set(Calendar.MILLISECOND,0);
CurrentTime.add(Calendar.HOUR,1);
Date NextHour=CurrentTime.getTime();
timer.schedule(new RenameTask(),NextHour,JOB_INTERNAL);Top
8 楼hemiao_1993(冷血动物)回复于 2006-04-29 15:21:34 得分 0
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class OneHour {
private final static long JOB_INTERNAL = 1000 * 60 * 60;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Timer timer = new Timer();
// timer.scheduleAtFixedRate(new MyTask, );
Calendar currentTime = Calendar.getInstance();
currentTime.setTime(new Date());
int currentHour = currentTime.get(Calendar.HOUR);
currentTime.set(Calendar.HOUR, currentHour + 1);
currentTime.set(Calendar.MINUTE, 0);
currentTime.set(Calendar.SECOND, 0);
currentTime.set(Calendar.MILLISECOND, 0);
Date NextHour = currentTime.getTime();
// System.out.println(NextHour);
timer.scheduleAtFixedRate(new MyTask(), NextHour, JOB_INTERNAL);
}
}
import java.util.Date;
import java.util.TimerTask;
class MyTask extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(new Date());
}
}
这个应该差不多了, 还有不要用Schedule().Top
9 楼Actan(灌篮张飞)回复于 2006-04-29 16:31:57 得分 0
冷血动物:
我改成JOB_INTERNAL = 2000;可以让它两秒钟执行一次吗?为什么我改了好像不行呢?
大致讲一下你的代码好吗?学习……谢谢Top
10 楼laughsmile(海边的星空)回复于 2006-04-29 16:50:06 得分 0
如果是windows,建议用计划任务Top
11 楼btb368()回复于 2006-04-29 17:10:08 得分 0
先MARK一下,嘿嘿Top
12 楼mazq024(mazq)回复于 2006-04-30 08:42:51 得分 0
linux、unix可以用cron设置定时任务Top
13 楼lovingpig(lovingpig)回复于 2006-04-30 08:50:51 得分 0
强烈支持quartzTop
14 楼mysohu( 21世纪最重要的就是我!:))回复于 2006-04-30 08:54:37 得分 0
MARK一下Top
15 楼Nowish(看我能忍耐多久)回复于 2006-04-30 09:13:09 得分 0
Twins~Top
16 楼UnAgain()回复于 2006-04-30 09:21:06 得分 0
markTop
17 楼hemiao_1993(冷血动物)回复于 2006-04-30 09:34:51 得分 0
冷血动物:
我改成JOB_INTERNAL = 2000;可以让它两秒钟执行一次吗?为什么我改了好像不行呢?
大致讲一下你的代码好吗?学习……谢谢
------------
肯定不行啦, 它第一次执行的时候会选下一个整点小时的时候. 说下大体思路: 先取当前时间, 比如说是12:30:45,321, 然后把这个时间的分秒微秒都设成0, 就变成了12:00:00,000, 在这个基础上再把小时数加1, 变成了13:00:00,000, 这个就是下一个整点小时的时间嘛.
具体细节看代码查帮助吧.Top
18 楼hemiao_1993(冷血动物)回复于 2006-04-30 09:36:26 得分 0
也就是说你改成了两秒, 它第一次执行还会选下一个整点的小时, 再往后就是每两秒执行一次了, 明白了吧.Top
19 楼UnAgain()回复于 2006-04-30 10:14:23 得分 0
同意hemiao_1993(冷血动物)的观点,不过要测试的话,时间可是够长的。 ^_^Top
20 楼hemiao_1993(冷血动物)回复于 2006-04-30 11:30:00 得分 0
同意hemiao_1993(冷血动物)的观点,不过要测试的话,时间可是够长的。 ^_^
-----------
测试的时候可以改成下一整点分钟开始执行, 哈哈. 不然要急死的.Top
21 楼zclgod(春风化雷)回复于 2006-04-30 11:46:05 得分 0
学习Top
22 楼qczl1224(倾情一世『qczl.ys168.com』)回复于 2006-04-30 14:09:34 得分 0
用数据库调度任务!Top
23 楼Actan(灌篮张飞)回复于 2006-04-30 15:11:13 得分 0
to 冷血动物和UnAgain()
明白了。我改了一下冷血动物的代码,可以立即执行了,(从当前算起)
private final static long JOB_INTERNAL = 5000;
currentTime.set(Calendar.HOUR, currentTime.get(Calendar.HOUR));
currentTime.set(Calendar.MINUTE, currentTime.get(Calendar.MINUTE));
currentTime.set(Calendar.SECOND, currentTime.get(Calendar.SECOND));
currentTime.set(Calendar.MILLISECOND, currentTime.get(Calendar.MILLISECOND));
从现在起,5秒执行一次了,呵呵
谢谢冷血动物Top
24 楼ygzeng()回复于 2006-05-08 15:05:42 得分 0
谢谢<冷血动物>
还有一个问题,为什么不用Schedule,而是用scheduleAtFixedRate
比如:5点运行一个任务,5点10分完成,如果用schedule,下次运行时间应该是:6点,如果使用scheduleAtFixedRate应该是:6点10分啊?Top
25 楼ygzeng()回复于 2006-05-08 15:08:57 得分 0
另外,currentTime.set(Calendar.HOUR, currentHour + 1);的话,如果是24点,那么下次运行时间是什么时候了?会不会跑到25点,这样导致程序无法运行Top
26 楼xiachedan(瞎扯蛋)回复于 2006-05-09 17:13:15 得分 0
顶Top
27 楼JAVA_WEB(不停地往上爬)回复于 2006-08-23 14:05:39 得分 0
用Quartz!Top
28 楼xblue3(http://my.6cncn.cn)回复于 2006-08-23 14:21:44 得分 0
用一个线程获取当前时间了
用一个哈希表保持任务呵呵
让线程睡一个小时呵呵
thread.sleep();
你还可以interraput sleep呵呵
呵呵结合图形界面可以设置sleep时间.....
多号呀
http://my.6cncn.cnTop
29 楼redv(Shutra)回复于 2006-08-23 15:22:59 得分 0
用Spring的Schedule,扩展性好,哈哈~Top




