Класс 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 ложно, то ScheduledService перейдёт в состояние FAILED и остановится. Чтобы перезапустить failed ScheduledService, необходимо вручную вызвать restart.
Если происходит сбой и restartOnFailure истинно, то ScheduledService может перезапуститься автоматически. Сначала результат вызова backoffStrategy станет новым значением cumulativePeriod. Таким образом, после каждой неудачи вы можете заставить сервис ждать всё больший промежуток времени перед перезапуском. После успешного завершения задачи cumulativePeriod сбрасывается до значения period.
ScheduledService определяет статические реализации EXPONENTIAL_BACKOFF_STRATEGY и LOGARITHMIC_BACKOFF_STRATEGY, из которых LOGARITHMIC_BACKOFF_STRATEGY является значением по умолчанию для backoffStrategy. После того, как maximumFailureCount будет достигнуто, ScheduledService перейдёт в состояние FAILED точно так же, как если бы restartOnFailure было ложным.
Если 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(), будет обрабатываться как Duration с максимальным значением в миллисекундах. Любой null Duration обрабатывается как Duration.ZERO. Любая пользовательская реализация обратного вызова стратегии backoff должна быть готова к обработке этих различных потенциальных значений.
ScheduledService вводит новую собственность, называемую lastValue. lastValue - это значение, которое было вычислено последним успешно. Поскольку Service очищает свойство value при каждом запуске, а ScheduledService запланирует запуск немедленно после завершения (если он не перейдёт в состояния cancelled или failed), свойство value не слишком полезно для ScheduledService. В большинстве случаев вам следует вместо этого использовать значение, возвращаемое lastValue.
- Примечание по реализации:
- Методы
Service.ready(),Service.scheduled(),Service.running(),succeeded(),Service.cancelled()иfailed()реализованы в этом классе. Подклассы, которые также переопределяют эти методы, должны позаботиться о вызове реализации суперкласса. - С:
- JavaFX 8.0
Краткое описание полей
| Тип | Поле | Описание |
|---|---|---|
final ObjectProperty<Callback<ScheduledService<?>, |
backoffStrategy |
Вычисляет количество времени для добавления к периоду при каждой неудаче. |
final ReadOnlyObjectProperty<Duration> |
cumulativePeriod |
Текущий кумулятивный период, используемый между итерациями. |
final ReadOnlyIntegerProperty |
currentFailureCount |
Текущее количество неудачных попыток ScheduledService. |
final ObjectProperty<Duration> |
delay |
Первоначальная задержка между первым запуском ScheduledService и началом его работы. |
final ReadOnlyObjectProperty<V> |
lastValue |
Последнее успешно вычисленное значение. |
final ObjectProperty<Duration> |
maximumCumulativePeriod |
Максимальное допустимое значение для cumulativePeriod. |
final IntegerProperty |
maximumFailureCount |
Максимальное количество неудачных попыток ScheduledService, прежде чем он просто завершится в состоянии FAILED. |
final ObjectProperty<Duration> |
period |
Минимальное количество времени между началом последнего запуска и началом следующего запуска. |
final BooleanProperty |
restartOnFailure |
Указывает, должен ли ScheduledService автоматически перезапускаться в случае сбоя Task. |
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе javafx.concurrent.Worker
Worker.State
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final Callback<ScheduledService<?>, |
EXPONENTIAL_BACKOFF_STRATEGY |
Реализация Callback для свойства backoffStrategy, которое будет экспоненциально откладывать период между повторными выполнениями в случае сбоя. |
static final Callback<ScheduledService<?>, |
LINEAR_BACKOFF_STRATEGY |
Реализация Callback для свойства backoffStrategy, которое будет линейно откладывать период между повторными выполнениями в случае сбоя. |
static final Callback<ScheduledService<?>, |
LOGARITHMIC_BACKOFF_STRATEGY |
Реализация Callback для свойства backoffStrategy, которое будет логарифмически откладывать период между повторными выполнениями в случае сбоя. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ScheduledService() |
Конструктор для вызова подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final ObjectProperty<Callback<ScheduledService<?>, |
backoffStrategyProperty() |
Вычисляет количество времени для добавления к периоду при каждой неудаче. |
boolean |
cancel() |
Отменяет любую выполняющуюся в данный момент задачу и останавливает эту запланированную службу, так что дополнительные итерации не будут происходить. |
final ReadOnlyObjectProperty<Duration> |
cumulativePeriodProperty() |
Текущий кумулятивный период, используемый между итерациями. |
final ReadOnlyIntegerProperty |
currentFailureCountProperty() |
Текущее количество неудачных попыток ScheduledService. |
final ObjectProperty<Duration> |
delayProperty() |
Первоначальная задержка между первым запуском ScheduledService и началом его работы. |
protected void |
failed() |
Защищенный вспомогательный метод для подклассов, вызываемый всякий раз, когда состояние Service переходит в состояние FAILED. |
final Callback<ScheduledService<?>, |
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<V> |
lastValueProperty() |
Последнее успешно вычисленное значение. |
final ObjectProperty<Duration> |
maximumCumulativePeriodProperty() |
Максимальное допустимое значение для cumulativePeriod. |
final IntegerProperty |
maximumFailureCountProperty() |
Максимальное количество неудачных попыток ScheduledService, прежде чем он просто завершится в состоянии FAILED. |
final ObjectProperty<Duration> |
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 перезапускается вручную или итерация завершается успешно. cumulativePeriod изменяется, когда ScheduledService переходит в состояние запланированности. cumulativePeriod может быть ограничен установкой 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. Установка этого значения поможет гарантировать, что в случае повторяющихся ошибок алгоритм экспоненциального увеличения времени ожидания не приведет к необоснованно большим значениям для cumulativePeriod. Время cumulativePeriod гарантированно не будет больше этого значения. Если maximumCumulativePeriod отрицательно, то cumulativePeriod будет ограничено значением 0. Если maximumCumulativePeriod имеет значение NaN или null, то это не повлияет на cumulativePeriod.
- Возвращает:
- значение свойства
maximumCumulativePeriod - См. также:
setMaximumCumulativePeriod
public final void setMaximumCumulativePeriod(Duration value)
maximumCumulativePeriod.- Описание свойства:
- Максимально допустимое значение для cumulativePeriod. Установка этого значения поможет гарантировать, что в случае повторяющихся ошибок алгоритм экспоненциального увеличения времени ожидания не приведет к необоснованно большим значениям для cumulativePeriod. Время 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, как и в случае с любым другим Service. Однако lastValue будет устанавливаться в последнее успешно вычисленное значение, даже между итерациями. Он сбрасывается при ручном вызове reset или restart.
- Возвращает:
- значение свойства
lastValue - См. также:
lastValueProperty
public final ReadOnlyObjectProperty<V> lastValueProperty()
- Возвращает:
- свойство
lastValue - См. также:
succeeded
protected void succeeded()
- Переопределяет:
-
succeededв классеService<V>
failed
protected void failed()
- Переопределяет:
-
failedв классеService<V>
reset
public void reset()
- Переопределяет:
-
resetв классеService<V>
cancel
public boolean cancel()
- Определяется в:
-
cancelв интерфейсеWorker<V> - Переопределяет:
-
cancelв классеService<V> - Возвращает:
- была ли отменена какая-либо выполняемая задача, false, если ни одна задача не была отменена. В любом случае, планируемая служба прекратит итерации.
© 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.