2013-11-12 7 views
2

Я знаю, что я должен использовать это вместо java.util.Timer по разным причинам. Итак, чтобы изучить это, я смотрел документы, и у меня есть несколько вопросов:Понимание ScheduledThreadPoolExecutor

  1. Как работает scheduleWithFixedDelay()? Мое понимание таково: сначала выполняется задача после заданной задержки. Когда задача будет выполнена, она ждет заданное время, а затем снова выполнит задачу.
  2. Что происходит, когда я отправляю задание scheduleAtFixedRate(), для выполнения которого требуется намного больше времени, чем указанная задержка? Например, я хочу, чтобы задача выполнялась каждые 5 секунд, но для завершения требуется 10 секунд. Я понимаю, что задача будет проходить в очереди и будет выполняться один раз в основной поток доступен
  3. Вот мое понимание того, как scheduleWithFixedDelay() и scheduleAtFixedRate() отличаются: scheduleWithFixedDelay() ждет для выполнения этой задачи, чтобы закончить выполнение, ожидает, пока и затем снова запускает задачу, когда scheduleAtFixedRate просто продолжит стрельбу по задаче, не заботясь о ее завершении или нет. Правильно?

ответ

4
  1. Correct.
  2. Не совсем. Если задача с фиксированной ставкой занимает больше времени, чем ее период, она будет запущена снова сразу после завершения, но следующий запуск не ждет потока. Смотри ниже.
  3. Задача с фиксированной ставкой выполняет вопрос о том, завершен ли предыдущий запуск, точно так же, как задание с фиксированной задержкой. За documentation: «Если какое-либо выполнение этой задачи занимает больше времени, чем ее период, последующие исполнения могут задерживаться, но не будут выполняться одновременно».

Подумайте об этом так:

  • Для задания фиксированной задержки, необходимо указать период, который будет являться точным количеством времени между запусками. Фактическая продолжительность задачи не влияет на задержку.
  • Для задачи с фиксированной ставкой вы указываете период, который будет максимум количество промежутков между прогонами. Если фактическая продолжительность задачи больше, чем период, скорость уменьшается, и нет эффективной задержки.
Смежные вопросы