java类中的定时器
Timert=newTimer("Demo");Longdelay=1000;Longinterval=5*60*1000;t.schedule(newDemoTask(...
Timer t=new Timer("Demo");
Long delay=1000;
Long interval=5*60*1000;
t.schedule(new DemoTask(), 1000*delay, interval*60*1000);
各位看官看完之后,现在问题来了。上诉问题我在描述一下:每隔5分钟执行一次DemoTask(); 如果这个Demotask执行的时间是10分钟的话,当DemoTask执行起来之后到五分钟的时候还没执行完,下一次执行时间又到了,又会再次执行。
我的想法是:让它每次执行完毕之后,等五分钟后再执行,执行完毕之后然后再等五分钟后再执行...............该怎么实现啊?
上面写错了,应该是 t.schedule(new DemoTask(), delay, interval); 展开
Long delay=1000;
Long interval=5*60*1000;
t.schedule(new DemoTask(), 1000*delay, interval*60*1000);
各位看官看完之后,现在问题来了。上诉问题我在描述一下:每隔5分钟执行一次DemoTask(); 如果这个Demotask执行的时间是10分钟的话,当DemoTask执行起来之后到五分钟的时候还没执行完,下一次执行时间又到了,又会再次执行。
我的想法是:让它每次执行完毕之后,等五分钟后再执行,执行完毕之后然后再等五分钟后再执行...............该怎么实现啊?
上面写错了,应该是 t.schedule(new DemoTask(), delay, interval); 展开
10个回答
展开全部
你这种方式不行。如果程序只要抛出了Exception,那么你这个定时器就崩溃了,这种定时器是最脆弱的。
可以用Spring集成的那种,可以配置时间,也可以自己控制时间,还可以拿Session之类的操作。操作数据库都行,也没有那么脆弱
我刚刚好写了一个实现。需要的话我传Demo给你吧
8446666 你懂的Q
可以用Spring集成的那种,可以配置时间,也可以自己控制时间,还可以拿Session之类的操作。操作数据库都行,也没有那么脆弱
我刚刚好写了一个实现。需要的话我传Demo给你吧
8446666 你懂的Q
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
t.schedule(new DemoTask(), 1000*delay, interval*60*1000);
不要这样用
这还不好办吗
你在你的DemoTask()执行完毕那时刻,调用t.start();//启动定时器
然后再在定时器中五分钟自后调用DemoTask(),并关闭定时器
如下代码
t1= new Timer(5000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
DemoTask();
t1.stop();
}
});
void DemoTask()
{
//执行完毕时候
t1.start();
}
注意程序没经调试,可能稍有细节要稍加修改
大体含义就是这样的
不要这样用
这还不好办吗
你在你的DemoTask()执行完毕那时刻,调用t.start();//启动定时器
然后再在定时器中五分钟自后调用DemoTask(),并关闭定时器
如下代码
t1= new Timer(5000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
DemoTask();
t1.stop();
}
});
void DemoTask()
{
//执行完毕时候
t1.start();
}
注意程序没经调试,可能稍有细节要稍加修改
大体含义就是这样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以添加一个线程,让这个DemoTask等五分钟执行。Thread.sleep(5*60*1000);这样程序会执行到你添加的地方后休息五分钟,然后继续执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想要实现这个功能,用Timer不好实现,建议你用quartz定时服务,很简单,设置cron表达式很容易实现。
cron表达式 0 0/5 * * * ?
cron表达式 0 0/5 * * * ?
追问
quartz组件一样有这个问题。我在描述一遍这个问题是每次执行的这个任务花费的时间超过了五分钟这个时间间隔
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定时器没用过,不过我想到一个方法,不知道可不可行:
while(true){
DemoTask();
wait(5*60*1000);
}
感觉功能上应该差不多吧
while(true){
DemoTask();
wait(5*60*1000);
}
感觉功能上应该差不多吧
追问
我觉得这样比较好。
while(true){
DemoTask();
Thread.sleep(5*60*1000);
}
感谢各位网友的热心解答,回答用quartz的都是高手。不过我这个只是个简单的定时器。杀鸡就不需要动用宰牛刀啦。
追答
呵呵,sleep是比wait好很多,我在想想用线程怎么控制,应该可以做到的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询