2010-10-07 58 views
3

如果我想安排與特定日期對齊的循環任務,那麼使用ScheduledExecutorService是有意義的。但它沒有辦法將第一個RunDate +後續延遲傳遞給scheduleAtFixedRate方法。我知道我可以自己退出最初的延遲,但是有什麼理由不是由API提供的嗎?特別是在內部,SES是使用triggerTimes實現的(這是我想要傳入的)。爲什麼ScheduledExecutorService不公開在特定時間運行的方法

回答

3

所有日程方法都接受相對延遲和週期作爲參數,而不是絕對的時間或日期。將表示爲日期的絕對時間轉換爲所需形式是一件簡單的事情。例如,要在某個未來某個日期進行計劃,可以使用:schedule(task,date.getTime() - System.currentTimeMillis(),TimeUnit.MILLISECONDS)。但請注意,由於網絡時間同步協議,時鐘漂移或其他因素,相對延遲的到期不必與啓用任務的當前日期一致。

它看起來好像是一個取消決定。衆所周知,Date類有其問題。例如TimeTask的public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 沒有考慮日光節約時間。

0

java.util.Timer提供了這種與TimerTask,因爲它有一個方法

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

,但你失去了線程池和Future支持ExecutorService

編輯:爲了回答你原來的問題,我想它只是沒有發生作者重載方法與日期。根據相關文檔

相關問題