Вы используете рычаги постфиксации . Вот руководство .
Вот демонстрационный сценарий Ruby, который посылает электронное письмо после каждой фиксации: фиксация-email.rb
Документация Javadoc для scheduleAtFixedRate
и scheduleWithFixedDelay
сообщает: «Если при выполнении задачи возникает исключение , последующие казни подавляются ". Я не нахожу это совершенно ясным, но похоже, что если ваш метод run
выдает какое-либо исключение, то планировщик эффективно отбрасывает эту задачу. Никакие другие задачи, выполняемые через этот планировщик, не должны быть затронуты. Проверить, что он делает на самом деле, не составит труда ...
Отмена задания не обязательно плохо. Если метод run генерирует исключение RuntimeException
, вероятно, где-то есть ошибка, и состояние системы неизвестно. Но, как минимум, я бы посоветовал перехватить RuntimeException
в вашем методе запуска и записать полную трассировку стека в SEVERE. В зависимости от обстоятельств вы можете затем выполнить повторное создание, чтобы отменить задачу. Но в любом случае вам понадобится регистрация, чтобы иметь шанс выяснить, что пошло не так.
Если вы используете scheduleAtFixedRate ()
или scheduleAtFixedDelay ()
, и ваша задача завершается с исключением, эта задача не будет перенесена. Однако другие независимые задачи должны продолжать выполняться, как ожидалось. (См. Документы API ). Если вам небезразлично, что это произошло, вы можете захватить возвращаемый ScheduledFuture
и вызвать метод get ()
. Если основная задача выбрасывает исключение, вы получите его из метода get ()
, заключенного в исключение ExecutionException
.
Похоже, API не определяет какой-либо конкретный механизм обработки исключений. Т.е. неперехваченное исключение просто появляется через кадры потока и в конечном итоге регистрируется в stderr.
Я вижу, что вы можете использовать следующие стратегии обработки исключений: