Класс ScheduledService<V>
- Параметры типа:
-
V- Вычисляемое значение ScheduledService
- Все реализованные интерфейсы:
-
Worker<V>,EventTarget
public abstract class ScheduledService<V> extends Service<V>
ScheduledService — это Service, который автоматически перезапускается после успешного выполнения и в определённых случаях перезапускается даже в случае ошибки. Новый ScheduledService начинается в состоянии READY, как и обычный Service. После вызова start или restart, ScheduledService переходит в состояние SCHEDULED на период, указанный в delay.
После перехода в состояние RUNNING, ScheduledService выполнит свою задачу. При успешном завершении ScheduledService переходит в состояние SUCCEEDED, затем в READY и снова в SCHEDULED. Время, которое ScheduledService остаётся в этом состоянии, зависит от времени между последним переходом в RUNNING и текущим временем, а также от period. Короче говоря, period определяет минимальное время от начала одного запуска до начала следующего. Если предыдущее выполнение завершилось до истечения period, ScheduledService останется в состоянии SCHEDULED до истечения этого периода. Если же выполнение заняло больше указанного времени, ScheduledService сразу переходит в RUNNING.
Если во время выполнения в состоянии RUNNING задача ScheduledService сбрасывает ошибку или каким-либо иным образом переходит в состояние FAILED, то ScheduledService либо перезапускается, либо останавливается, в зависимости от значений backoffStrategy, restartOnFailure и maximumFailureCount.
Если происходит ошибка и restartOnFailure равно false, то ScheduledService перейдёт в состояние FAILED и остановится. Чтобы перезапустить ошибочный ScheduledService, необходимо вручную вызвать restart.
Если происходит ошибка и restartOnFailure равно true, то ScheduledService может автоматически перезапуститься. Сначала результат вызова backoffStrategy станет новым cumulativePeriod. Таким образом, после каждой ошибки вы можете заставить службу ждать всё больший и больший период времени перед перезапуском. После того, как задача успешно завершится, cumulativePeriod сбросится до значения period.
ScheduledService определяет статические реализации EXPONENTIAL_BACKOFF_STRATEGY и LOGARITHMIC_BACKOFF_STRATEGY, из которых LOGARITHMIC_BACKOFF_STRATEGY является значением по умолчанию для backoffStrategy. После достижения maximumFailureCount ScheduledService перейдёт в состояние FAILED точно так же, как если бы restartOnFailure было false.
Если period или delay изменяются во время работы ScheduledService, новые значения будут учтены на следующей итерации. Например, если period увеличено, то в следующий раз, когда ScheduledService перейдёт в состояние SCHEDULED, будет использоваться новое значение period. Аналогично, если delay изменено, новое значение будет применено при следующем перезапуске или сбросе/запуске.
ScheduledService<Document> svc = new ScheduledService<Document>() {
protected Task<Document> createTask() {
return new Task<Document>() {
protected Document call() {
// Connect to a Server
// Get the XML document
// Parse it into a document
return document;
}
};
}
};
svc.setPeriod(Duration.seconds(1));
Этот пример будет проверять удалённый сервер каждые 1 секунду. Время работы этого класса не является абсолютно надёжным. Очень загруженный поток событий может ввести задержку в начале выполнения фоновой задачи, поэтому очень малые значения для периода или задержки могут быть неточными. Задержка или период в сотни миллисекунд или больше должны быть достаточно надёжны.
ScheduledService в своей конфигурации по умолчанию имеет значение по умолчанию period равное 0 и значение по умолчанию delay равное 0. Это заставит ScheduledService выполнить задачу сразу после Service.start() и повторно выполнить её сразу после успешного завершения.
Для целей этого класса любой Duration, возвращающий true для Duration.isUnknown(), будет обрабатываться так, как будто это Duration.ZERO. Аналогично, любой Duration, возвращающий true для Duration.isIndefinite(), будет обрабатываться так, как будто это время продолжительностью Double.MAX_VALUE миллисекунд. Любой null Duration обрабатывается как Duration.ZERO. Любая пользовательская реализация обратного вызова стратегии backoff должна быть готова к обработке этих различных потенциальных значений.
ScheduledService вводит новое свойство, называемое lastValue. lastValue — это значение, которое было вычислено последним успешно. Поскольку Service очищает свой value property при каждом запуске, и поскольку ScheduledService перепланирует запуск сразу после завершения (если не переходит в состояния cancelled или failed), свойство value не очень полезно в ScheduledService. В большинстве случаев вы захотите использовать значение, возвращаемое lastValue.
- Примечание о реализации:
- Методы
Service.ready(),Service.scheduled(),Service.running(),succeeded(),Service.cancelled()иfailed()реализованы в этом классе. Подклассы, которые также переопределяют эти методы, должны позаботиться о вызове реализации суперкласса. - С:
- JavaFX 8.0
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе javafx.concurrent.Worker
Worker.State
Краткое описание полей
| Тип | Свойство | Описание |
|---|---|---|
final ObjectProperty |
backoffStrategy |
Вычисляет количество времени для добавления к периоду при каждой ошибке. |
final ReadOnlyObjectProperty |
cumulativePeriod |
Текущий кумулятивный период, используемый между итерациями. |
final ReadOnlyIntegerProperty |
currentFailureCount |
Текущее количество неудачных попыток ScheduledService. |
final ObjectProperty |
delay |
Первоначальная задержка между первым запуском ScheduledService и началом его работы. |
final ReadOnlyObjectProperty |
lastValue |
Последнее успешно вычисленное значение. |
final ObjectProperty |
maximumCumulativePeriod |
Максимально допустимое значение для cumulativePeriod. |
final IntegerProperty |
maximumFailureCount |
Максимальное количество неудачных попыток ScheduledService, прежде чем он просто завершится в состоянии FAILED. |
final ObjectProperty |
period |
Минимальное количество времени между началом последнего запуска и началом следующего запуска. |
final BooleanProperty |
restartOnFailure |
Указывает, должен ли ScheduledService автоматически перезапускаться в случае сбоя Task. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final Callback |
EXPONENTIAL_BACKOFF_STRATEGY |
Реализация Callback для свойства backoffStrategy, которое будет экспоненциально уменьшать период между повторными выполнениями в случае сбоя. |
static final Callback |
LINEAR_BACKOFF_STRATEGY |
Реализация Callback для свойства backoffStrategy, которое будет линейно уменьшать период между повторными выполнениями в случае сбоя. |
static final Callback |
LOGARITHMIC_BACKOFF_STRATEGY |
Реализация Callback для свойства backoffStrategy, которое будет логарифмически уменьшать период между повторными выполнениями в случае сбоя. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ScheduledService() |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final ObjectProperty |
backoffStrategyProperty() |
Вычисляет количество времени для добавления к периоду при каждой ошибке. |
boolean |
cancel() |
Отменяет любую выполняющуюся задачу и останавливает эту запланированную службу, так что дополнительные итерации не произойдут. |
final ReadOnlyObjectProperty |
cumulativePeriodProperty() |
Текущий кумулятивный период, используемый между итерациями. |
final ReadOnlyIntegerProperty |
currentFailureCountProperty() |
Текущее количество неудачных попыток ScheduledService. |
final ObjectProperty |
delayProperty() |
Первоначальная задержка между первым запуском ScheduledService и началом его работы. |
protected void |
failed() |
Защищенный вспомогательный метод для подклассов, вызываемый всякий раз, когда состояние Service переходит в состояние FAILED. |
final Callback |
getBackoffStrategy() |
Получает значение свойства backoffStrategy. |
final Duration |
getCumulativePeriod() |
Получает значение свойства cumulativePeriod. |
final int |
getCurrentFailureCount() |
Получает значение свойства currentFailureCount. |
final Duration |
getDelay() |
Получает значение свойства delay. |
final V |
getLastValue() |
Получает значение свойства lastValue. |
final Duration |
getMaximumCumulativePeriod() |
Получает значение свойства maximumCumulativePeriod. |
final int |
getMaximumFailureCount() |
Получает значение свойства maximumFailureCount. |
final Duration |
getPeriod() |
Получает значение свойства period. |
final boolean |
getRestartOnFailure() |
Получает значение свойства restartOnFailure. |
final ReadOnlyObjectProperty |
lastValueProperty() |
Последнее успешно вычисленное значение. |
final ObjectProperty |
maximumCumulativePeriodProperty() |
Максимально допустимое значение для cumulativePeriod. |
final IntegerProperty |
maximumFailureCountProperty() |
Максимальное количество неудачных попыток ScheduledService, прежде чем он просто завершится в состоянии FAILED. |
final ObjectProperty |
periodProperty() |
Минимальное количество времени между началом последнего запуска и началом следующего запуска. |
void |
reset() |
Сбрасывает Service. |
final BooleanProperty |
restartOnFailureProperty() |
Указывает, должен ли ScheduledService автоматически перезапускаться в случае сбоя Task. |
final void |
setBackoffStrategy |
Задает значение свойства backoffStrategy. |
final void |
setDelay |
Задает значение свойства delay. |
final void |
setMaximumCumulativePeriod |
Задает значение свойства maximumCumulativePeriod. |
final void |
setMaximumFailureCount |
Задает значение свойства maximumFailureCount. |
final void |
setPeriod |
Задает значение свойства period. |
final void |
setRestartOnFailure |
Задает значение свойства restartOnFailure. |
protected void |
succeeded() |
Защищенный вспомогательный метод для подклассов, вызываемый всякий раз, когда состояние Service переходит в состояние SUCCEEDED. |
Методы, объявленные в классе javafx.concurrent.Service
addEventFilter, addEventHandler, buildEventDispatchChain, cancelled, createTask, exceptionProperty, executeTask, executorProperty, fireEvent, getException, getExecutor, getMessage, getOnCancelled, getOnFailed, getOnReady, getOnRunning, getOnScheduled, getOnSucceeded, getProgress, getState, getTitle, getTotalWork, getValue, getWorkDone, isRunning, messageProperty, onCancelledProperty, onFailedProperty, onReadyProperty, onRunningProperty, onScheduledProperty, onSucceededProperty, progressProperty, ready, removeEventFilter, removeEventHandler, restart, running, runningProperty, scheduled, setEventHandler, setExecutor, setOnCancelled, setOnFailed, setOnReady, setOnRunning, setOnScheduled, setOnSucceeded, start, stateProperty, titleProperty, totalWorkProperty, valueProperty, workDoneProperty
Подробности свойства
задержка
public final ObjectProperty<Duration> delayProperty
Service.start() или Service.restart().- См. также:
период
public final ObjectProperty<Duration> periodProperty
cumulativePeriod) будет зависеть от этого свойства, а также от backoffStrategy и количества ошибок.- См. также:
стратегия_повторного_запуска
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty
- См. также:
перезапуск_при_ошибке
public final BooleanProperty restartOnFailureProperty
- См. также:
максимальное_количество_ошибок
public final IntegerProperty maximumFailureCountProperty
- См. также:
текущее_количество_ошибок
public final ReadOnlyIntegerProperty currentFailureCountProperty
- См. также:
накопленный_период
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty
period, за исключением случая ошибки, когда в качестве накопленного периода после каждой ошибки используется результат backoffStrategy. Сбрасывается при ручном перезапуске ScheduledService или успешной итерации. Накопленный период изменяется при входе ScheduledService в состояние запланированности. Накопленный период может быть ограничен установкой maximumCumulativePeriod.- См. также:
максимальный_накопленный_период
public final ObjectProperty<Duration> maximumCumulativePeriodProperty
- См. также:
последнее_значение
public final ReadOnlyObjectProperty<V> lastValueProperty
- См. также:
Подробности поля
EXPONENTIAL_BACKOFF_STRATEGY
public static final Callback<ScheduledService<?>,Duration> EXPONENTIAL_BACKOFF_STRATEGY
backoffStrategy, которая экспоненциально увеличивает период между повторными выполнениями в случае ошибки. Это вычисление использует исходный период и количество последовательных ошибок для вычисления величины отложенного запуска. Если service равно null, возвращается Duration.ZERO. Если период равен 0, результат этого метода будет просто Math.exp(currentFailureCount). Во всех других случаях возвращаемое значение такое же, как и period + (period * Math.exp(currentFailureCount)).
LOGARITHMIC_BACKOFF_STRATEGY
public static final Callback<ScheduledService<?>,Duration> LOGARITHMIC_BACKOFF_STRATEGY
backoffStrategy, которая логарифмически увеличивает период между повторными выполнениями в случае ошибки. Это вычисление использует исходный период и количество последовательных ошибок для вычисления величины отложенного запуска. Если service равно null, возвращается Duration.ZERO. Если период равен 0, результат этого метода будет просто Math.log1p(currentFailureCount). Во всех других случаях возвращаемое значение такое же, как и period + (period * Math.log1p(currentFailureCount)).
LINEAR_BACKOFF_STRATEGY
public static final Callback<ScheduledService<?>,Duration> LINEAR_BACKOFF_STRATEGY
backoffStrategy, которая линейно увеличивает период между повторными выполнениями в случае ошибки. Это вычисление использует исходный период и количество последовательных ошибок для вычисления величины отложенного запуска. Если service равно null, возвращается Duration.ZERO. Если период равен 0, результат этого метода будет просто currentFailureCount. Во всех других случаях возвращаемое значение такое же, как и period + (period * currentFailureCount).
Подробности конструктора
ScheduledService
public ScheduledService()
Подробности метода
getDelay
public final Duration getDelay()
delay.- Описание свойства:
- Начальная задержка между моментом запуска ScheduledService и началом его работы. Это время, в течение которого ScheduledService будет находиться в состоянии SCHEDULED, прежде чем перейдет в состояние RUNNING после свежего вызова
Service.start()илиService.restart(). - Возвращает:
- значение свойства
delay - См. также:
setDelay
public final void setDelay(Duration value)
delay.- Описание свойства:
- Начальная задержка между моментом запуска ScheduledService и началом его работы. Это время, в течение которого ScheduledService будет находиться в состоянии SCHEDULED, прежде чем перейдет в состояние RUNNING после свежего вызова
Service.start()илиService.restart(). - Параметры:
-
value- значение для свойстваdelay - См. также:
delayProperty
public final ObjectProperty<Duration> delayProperty()
Service.start() или Service.restart().- Возвращает:
- свойство
delay - См. также:
getPeriod
public final Duration getPeriod()
period.- Описание свойства:
- Минимальное время ожидания между завершением последнего выполнения и началом следующего. Фактическое время выполнения (также известное как
cumulativePeriod) зависит от этого свойства, а также отbackoffStrategyи числа ошибок. - Возвращает:
- значение свойства
period - См. также:
setPeriod
public final void setPeriod(Duration value)
period.- Описание свойства:
- Минимальное время ожидания между завершением последнего выполнения и началом следующего. Фактическое время выполнения (также известное как
cumulativePeriod) зависит от этого свойства, а также отbackoffStrategyи числа ошибок. - Параметры:
-
value- значение для свойстваperiod - См. также:
periodProperty
public final ObjectProperty<Duration> periodProperty()
cumulativePeriod) зависит от этого свойства, а также от backoffStrategy и числа ошибок.- Возвращает:
- свойство
period - См. также:
getBackoffStrategy
public final Callback<ScheduledService<?>,Duration> getBackoffStrategy()
backoffStrategy.- Описание свойства:
- Вычисляет время, которое нужно добавить к периоду при каждой ошибке. Это накопительное значение сбрасывается при каждом ручном перезапуске ScheduledService.
- Возвращает:
- значение свойства
backoffStrategy - См. также:
setBackoffStrategy
public final void setBackoffStrategy(Callback<ScheduledService<?>,Duration> value)
backoffStrategy.- Описание свойства:
- Вычисляет время, которое нужно добавить к периоду при каждой ошибке. Это накопительное значение сбрасывается при каждом ручном перезапуске ScheduledService.
- Параметры:
-
value- значение для свойстваbackoffStrategy - См. также:
backoffStrategyProperty
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty()
- Возвращает:
- свойство
backoffStrategy - См. также:
getRestartOnFailure
public final boolean getRestartOnFailure()
restartOnFailure.- Описание свойства:
- Указывает, следует ли автоматически перезапускать ScheduledService в случае ошибки в задаче.
- Возвращает:
- значение свойства
restartOnFailure - См. также:
setRestartOnFailure
public final void setRestartOnFailure(boolean value)
restartOnFailure.- Описание свойства:
- Указывает, следует ли автоматически перезапускать ScheduledService в случае ошибки в задаче.
- Параметры:
-
value- значение для свойстваrestartOnFailure - См. также:
restartOnFailureProperty
public final BooleanProperty restartOnFailureProperty()
- Возвращает:
- свойство
restartOnFailure - См. также:
getMaximumFailureCount
public final int getMaximumFailureCount()
maximumFailureCount.- Описание свойства:
- Максимальное количество попыток неудачного выполнения ScheduledService, после чего оно переходит в состояние FAILED. Конечно, ScheduledService можно перезапустить вручную, что сбросит текущее значение счётчика.
- Возвращает:
- значение свойства
maximumFailureCount - См. также:
setMaximumFailureCount
public final void setMaximumFailureCount(int value)
maximumFailureCount.- Описание свойства:
- Максимальное количество попыток неудачного выполнения ScheduledService, после чего оно переходит в состояние FAILED. Конечно, ScheduledService можно перезапустить вручную, что сбросит текущее значение счётчика.
- Параметры:
-
value- значение для свойстваmaximumFailureCount - См. также:
maximumFailureCountProperty
public final IntegerProperty maximumFailureCountProperty()
- Возвращает:
- свойство
maximumFailureCount - См. также:
getCurrentFailureCount
public final int getCurrentFailureCount()
currentFailureCount.- Описание свойства:
- Текущее количество неудачных выполнений ScheduledService. Сбрасывается при ручном перезапуске ScheduledService.
- Возвращает:
- значение свойства
currentFailureCount - См. также:
currentFailureCountProperty
public final ReadOnlyIntegerProperty currentFailureCountProperty()
- Возвращает:
- свойство
currentFailureCount - См. также:
getCumulativePeriod
public final Duration getCumulativePeriod()
cumulativePeriod.- Описание свойства:
- Текущий кумулятивный период, используемый между итерациями. Он будет таким же, как
period, за исключением случаев сбоя, в которых результат backoffStrategy используется в качестве кумулятивного периода после каждого сбоя. Он сбрасывается всякий раз, когда ScheduledService перезапускается вручную или итерация завершается успешно. CumulativePeriod изменяется, когда ScheduledService переходит в запланированное состояние. CumulativePeriod можно ограничить, установивmaximumCumulativePeriod. - Возвращает:
- значение свойства
cumulativePeriod - См. также:
cumulativePeriodProperty
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty()
period, за исключением случаев сбоя, в которых результат backoffStrategy используется в качестве кумулятивного периода после каждого сбоя. Он сбрасывается всякий раз, когда ScheduledService перезапускается вручную или итерация завершается успешно. CumulativePeriod изменяется, когда ScheduledService переходит в запланированное состояние. CumulativePeriod можно ограничить, установив maximumCumulativePeriod.- Возвращает:
- свойство
cumulativePeriod - См. также:
getMaximumCumulativePeriod
public final Duration getMaximumCumulativePeriod()
maximumCumulativePeriod.- Описание свойства:
- Максимально допустимое значение для cumulativePeriod. Установка этого значения поможет гарантировать, что в случае многократных сбоев алгоритм экспоненциального увеличения времени ожидания не приведет к необоснованно большим значениям для кумулятивного периода. Кумулятивный период гарантированно не будет больше этого значения. Если maximumCumulativePeriod отрицательный, то cumulativePeriod будет ограничен значением 0. Если maximumCumulativePeriod NaN или null, то это не повлияет на cumulativePeriod.
- Возвращает:
- значение свойства
maximumCumulativePeriod - См. также:
setMaximumCumulativePeriod
public final void setMaximumCumulativePeriod(Duration value)
maximumCumulativePeriod.- Описание свойства:
- Максимально допустимое значение для cumulativePeriod. Установка этого значения поможет гарантировать, что в случае многократных сбоев алгоритм экспоненциального увеличения времени ожидания не приведет к необоснованно большим значениям для кумулятивного периода. Кумулятивный период гарантированно не будет больше этого значения. Если maximumCumulativePeriod отрицательный, то cumulativePeriod будет ограничен значением 0. Если maximumCumulativePeriod NaN или null, то это не повлияет на cumulativePeriod.
- Параметры:
-
value- значение свойстваmaximumCumulativePeriod - См. также:
maximumCumulativePeriodProperty
public final ObjectProperty<Duration> maximumCumulativePeriodProperty()
- Возвращает:
- свойство
maximumCumulativePeriod - См. также:
getLastValue
public final V getLastValue()
lastValue.- Описание свойства:
- Последнее успешно вычисленное значение. Во время каждой итерации значение ScheduledService будет сбрасываться до null, как и в любом другом сервисе. Однако lastValue будет устанавливаться на последнее успешно вычисленное значение, даже через несколько итераций. Однако он сбрасывается всякий раз, когда вы вручную вызываете reset или restart.
- Возвращает:
- значение свойства
lastValue - См. также:
lastValueProperty
public final ReadOnlyObjectProperty<V> lastValueProperty()
- Возвращает:
- свойство
lastValue - См. также:
succeeded
protected void succeeded()
failed
protected void failed()
reset
public void reset()
cancel
public boolean cancel()
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.