首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Java任务安排在指定时间内

将Java任务安排在指定时间内
EN

Stack Overflow用户
提问于 2011-11-09 22:03:25
回答 6查看 12.6K关注 0票数 6

我希望能够在Java中的特定时间安排任务。我知道ExecutorService能够在指定的延迟后定期调度,但我更关注的是一天中的某个时间,而不是某个持续时间之后。

比方说,有没有办法让Runnable在2:00执行,或者我需要计算从现在到2:00的时间,然后调度runnable在该延迟之后执行?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-09 22:05:45

你会想要Quartz的。

票数 4
EN

Stack Overflow用户

发布于 2011-11-09 23:36:56

您也可以使用spring注解。

代码语言:javascript
复制
@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
// something that should execute on weekdays only
}

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html

票数 6
EN

Stack Overflow用户

发布于 2012-09-07 15:23:57

这就是我用java7SE解决这个问题的方法:

代码语言:javascript
复制
    timer = new Timer("Timer", true);
    Calendar cr = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    cr.setTimeInMillis(System.currentTimeMillis());
    long day = TimeUnit.DAYS.toMillis(1);
    //Pay attention - Calendar.HOUR_OF_DAY for 24h day model 
    //(Calendar.HOUR is 12h model, with p.m. a.m. )
    cr.set(Calendar.HOUR_OF_DAY, it.getHours());
    cr.set(Calendar.MINUTE, it.getMinutes());
    long delay = cr.getTimeInMillis() - System.currentTimeMillis();
    //insurance for case then time of task is before time of schedule
    long adjustedDelay = (delay > 0 ? delay : day + delay);
    timer.scheduleAtFixedRate(new StartReportTimerTask(it), adjustedDelay, day);
    //you can use this schedule instead is sure your time is after current time
    //timer.scheduleAtFixedRate(new StartReportTimerTask(it), cr.getTime(), day);

它碰巧比我想象的要难做得多。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8066141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档