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);
展开
 我来答
JSON在线解析
2012-12-14 · 专注JSON在线解析工具,JavaDemo分享
JSON在线解析
采纳数:644 获赞数:1154

向TA提问 私信TA
展开全部
你这种方式不行。如果程序只要抛出了Exception,那么你这个定时器就崩溃了,这种定时器是最脆弱的。
可以用Spring集成的那种,可以配置时间,也可以自己控制时间,还可以拿Session之类的操作。操作数据库都行,也没有那么脆弱
我刚刚好写了一个实现。需要的话我传Demo给你吧
8446666 你懂的Q
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦幻怪兽
2012-12-14 · TA获得超过5172个赞
知道大有可为答主
回答量:1786
采纳率:100%
帮助的人:740万
展开全部
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();

}

注意程序没经调试,可能稍有细节要稍加修改

大体含义就是这样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1060436077
2012-12-14 · TA获得超过582个赞
知道小有建树答主
回答量:2784
采纳率:0%
帮助的人:664万
展开全部
你可以添加一个线程,让这个DemoTask等五分钟执行。Thread.sleep(5*60*1000);这样程序会执行到你添加的地方后休息五分钟,然后继续执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
子晓聊技术
2012-12-14 · TA获得超过1237个赞
知道小有建树答主
回答量:277
采纳率:0%
帮助的人:422万
展开全部
你想要实现这个功能,用Timer不好实现,建议你用quartz定时服务,很简单,设置cron表达式很容易实现。

cron表达式 0 0/5 * * * ?
追问
quartz组件一样有这个问题。我在描述一遍这个问题是每次执行的这个任务花费的时间超过了五分钟这个时间间隔
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yxl_star
2012-12-14 · 超过18用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:33.2万
展开全部
定时器没用过,不过我想到一个方法,不知道可不可行:
while(true){
DemoTask();
wait(5*60*1000);
}
感觉功能上应该差不多吧
追问
我觉得这样比较好。
while(true){
DemoTask();
Thread.sleep(5*60*1000);
}
感谢各位网友的热心解答,回答用quartz的都是高手。不过我这个只是个简单的定时器。杀鸡就不需要动用宰牛刀啦。
追答
呵呵,sleep是比wait好很多,我在想想用线程怎么控制,应该可以做到的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式