代码之家  ›  专栏  ›  技术社区  ›  Mike Q

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

  •  3
  • Mike Q  · 技术社区  · 14 年前

    如果我想在定期任务中安排与特定日期一致的日程,那么使用它是有意义的。 ScheduledExecutorService . 但它没有方法将firstrundate+后续延迟传递到 scheduleAtFixedRate 方法。我知道我可以自己取消最初的延迟,但是API没有提供这种延迟有什么原因吗?特别是在内部,SES是使用TriggerTimes(这是我想要传递的)实现的。

    2 回复  |  直到 14 年前
        1
  •  3
  •   John Vint    14 年前

    根据文件:

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

    看起来这是一个亵渎的决定。众所周知,日期类有它的问题。例如时间任务 public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 不占白昼节约时间。

        2
  •  0
  •   Qwerky    14 年前

    java.util.Timer 提供此 TimerTask 因为它有一个方法

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

    但是你失去了线程池 Future 支持 ExecutorService .

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