我正在研究
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安排提醒吗?
最佳答案 只需快速检查日期是否过去,然后创建一个新的临时开始日期时间,即现在开始的增量.