Почему ScheduledExecutorService не предоставляет методы для запуска в определенное время - PullRequest
3 голосов
/ 07 октября 2010

Если я хочу запланировать повторяющееся задание, соответствующее определенной дате, имеет смысл использовать ScheduledExecutorService.Но у него нет метода для передачи firstRunDate + последующая задержка методу scheduleAtFixedRate.Я знаю, что могу отменить начальную задержку самостоятельно, но есть ли причина, по которой это не предусмотрено API?Тем более, что внутренне SES реализован с использованием triggerTimes (что я и хочу передать).

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

На основании документации:

Все методы расписания принимают относительные задержки и периоды в качестве аргументов, а не абсолютные времена или даты.Преобразовать абсолютное время, представленное в виде даты, в простую форму очень просто.Например, чтобы запланировать на определенную дату в будущем, вы можете использовать: schedule (task, date.getTime () - System.currentTimeMillis (), TimeUnit.MILLISECONDS).Однако помните, что истечение относительной задержки не обязательно должно совпадать с текущей датой, в которую задача включена, из-за сетевых протоколов синхронизации времени, смещения тактового сигнала или других факторов.

Похоже, что это было отмененное решение.Широко известно, что у класса Date есть свои проблемы.Например, TimeTask public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) не учитывает летнее время.

0 голосов
/ 07 октября 2010

java.util.Timer обеспечивает это TimerTask, поскольку у него есть метод

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

но вы теряете пул потоков и Future поддержку ExecutorService.

Изменить: Чтобы ответить на ваш оригинальный вопрос, я думаю, автору просто не пришло в голову перегружать метод датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...