java – ScheduledExecutorService.scheduleAtFixedRate并将initialDelay设置为过去的日期

我正在研究
Java中的一个调度系统,它根据startDate,endDate和occurrence(每小时,每天,每周,每月,星期一等)发出提醒.最初我使用Timer和TimerTask类来安排提醒:

Timer timer = new Timer();
timer.scheduleAtFixedRate(reminder, firstDate, period);

我最近切换到ScheduledExecutorService,因此我可以更好地控制取消事件. ScheduledExecutorService适用于重复提醒,但过去使用startDate重新安排提醒的情况除外. scheduleAtFixedRate函数只允许您为initialDelay指定long值,而不是实际的Date对象:

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(reminder, initialDelay, period, unit);

这会产生一个问题,因为传入负的initialDelay仍会导致事件立即被触发,从而导致它在现在的周期而不是startDate周期重新发生.

我有什么想法(重新)在过去使用startDate安排提醒吗?

最佳答案 只需快速检查日期是否过去,然后创建一个新的临时开始日期时间,即现在开始的增量.

点赞