为什么ScheduledExecutorService不公开在特定时间运行的方法

时间:2010-10-07 15:37:38

标签: java scheduling

如果我想安排与特定日期保持一致的重复性任务,则使用ScheduledExecutorService是有意义的。但它没有办法将firstRunDate +后续延迟传递给scheduleAtFixedRate方法。我知道我可以自己退出最初的延迟,但有没有理由不提供API?特别是在内部,SES是使用triggerTimes实现的(这是我想要传入的)。

2 个答案:

答案 0 :(得分:3)

基于文档:

  

所有计划方法都接受相对延迟和句点作为参数,而不是绝对时间或日期。将表示为Date的绝对时间转换为所需的形式是一件简单的事情。例如,要在某个未来日期安排,您可以使用:schedule(task,date.getTime() - System.currentTimeMillis(),TimeUnit.MILLISECONDS)。但请注意,相对延迟的到期不一定与由于网络时间同步协议,时钟漂移或其他因素而启用任务的当前日期一致。

看起来好像这是一个决定性的决定。众所周知,Date类有其问题。例如,TimeTask的public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 不考虑日光节省时间。

答案 1 :(得分:0)

java.util.Timer通过TimerTask提供此方法,因为它有方法

public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

但是你失去了Future的线程池和ExecutorService支持。

编辑:为了回答你原来的问题,我想作者没有想到用日期重载方法。