执行的方法来检查的时间和特定的时间执行的方法
我运行一个IRC bot,它需要在两个集小时的聊天呼应的消息,为此,每隔几分钟:执行的方法来检查的时间和特定的时间执行的方法
我试图做的:
public void timerTest(int minH,int maxH, int minT){
boolean b = true;
boolean timeout = false;
while(b){
while(!timeout){
if(c.get(Calendar.HOUR_OF_DAY) >= minH && c.get(Calendar.HOUR_OF_DAY) <= maxH && c.get(Calendar.MINUTE) % minT == 0){
sendMessage(channel,spam1.getMessage());
timeout = true;
}
}
if(c.get(Calendar.MINUTE)%minT == 1){
timeout = false;
}
}
}
我常想垃圾邮件的邮件2-6之间,每15分钟我试图把它在unendless while循环,但不建议这样做。我寻找Timer和TimerTask,但我无法弄清楚如何正确地做到这一点。如果有人会如此善意地解释我如何实现这一目标?
谢谢^^
的Java Timer
和TimerTask
不是真能胜任复杂的调度需求,如你的。
我会建议您调查quartz
。它允许你安排例如使用cron
表达式,这是非常强大的。我认为像下面的表达式可能是有用的:
*/15 2-6 * * * ?
谢谢,它似乎令人难以置信的强大,将玩一段时间:p – 2011-03-12 16:43:51
我仍然有一个问题,虽然我正在运行我的IRCbot但它仍然需要能够定期在类中运行一个方法,因为它使用另一种方法来自另一个只能被初始化一次的对象。但我似乎只能安排一堂课? – 2011-03-12 17:21:26
@Lucas,你实现了'job'接口,它可以让你运行一个方法。参见['例子1 - 你的第一个Quartz程序](http://www.quartz-scheduler.org/docs/examples/Example1.html) – 2011-03-12 18:32:05
一个非常简单的想法可能是使用Spring和做这个任务 任务框架看一看 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html
你可以简单地注释你的类方法与 @Scheduled(cron = "*/15 2-6 * * * ?")
或者,如果你不希望包括Spring的依赖,你可以创建的ScheduledThreadPoolExecutor
// set the poolsize to 1
ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
// call method
}
}, 2,2, TimeUnit.HOURS);
这使您能够灵活地安排可以定期调用您的方法的runnable。确保在应用程序关闭时关闭执行程序,否则应用程序可能会挂起。
显示如何创建'c' – adarshr 2011-03-12 16:16:45
,并且您帖子右侧的“相关问题”都无法帮助您? – smas 2011-03-12 16:21:09
为什么不推荐使用循环? – 2011-03-12 16:23:49