Класс 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 выполняет свою задачу Task. При успешном завершении ScheduledService переходит в состояние SUCCEEDED, а затем в состояние READY и обратно в SCHEDULED. Время пребывания ScheduledService в этом состоянии зависит от времени между последним переходом в состояние RUNNING и текущим временем, а также от period. Короче говоря, period определяет минимальное время между началом одного выполнения и началом следующего. Если предыдущее выполнение завершилось до истечения period, то ScheduledService останется в состоянии SCHEDULED до истечения этого периода. Если же выполнение заняло больше времени, чем указанный период, то ScheduledService сразу переходит обратно в состояние RUNNING.
Если во время выполнения в состоянии RUNNING Task ScheduledService вызывает ошибку или каким-либо другим образом переходит в состояние FAILED, то ScheduledService либо перезапустится, либо остановится, в зависимости от значений backoffStrategy, restartOnFailure и maximumFailureCount.
Если происходит ошибка и restartOnFailure ложно, то ScheduledService переходит в состояние 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 и delay, равные 0. Это заставит ScheduledService выполнить задачу немедленно после Service.start() и повторно выполнить ее немедленно после успешного завершения.
Для целей этого класса любая продолжительность, возвращающая true для Duration.isUnknown(), будет обрабатываться как Duration.ZERO. Аналогично, любая продолжительность, возвращающая true для Duration.isIndefinite(), будет обрабатываться как продолжительность Double.MAX_VALUE миллисекунд. Любой null Duration обрабатывается как Duration.ZERO. Любая пользовательская реализация обратного вызова стратегии отката должна быть готова обрабатывать эти различные возможные значения.
ScheduledService вводит новое свойство lastValue. lastValue — это значение, которое было вычислено в последнюю очередь успешно. Поскольку Service очищает свойство value при каждом выполнении, а ScheduledService будет перепланировать выполнение сразу после завершения (если он не переходит в состояния cancelled или failed), свойство value не очень полезно для ScheduledService. В большинстве случаев вы захотите использовать значение, возвращаемое lastValue.
Service.ready(), Service.scheduled(), Service.running(), succeeded(), Service.cancelled() и failed() реализованы в этом классе. Подклассы, которые также переопределяют эти методы, должны позаботиться о вызове реализации super.- С момента:
- JavaFX 8.0
Краткое описание свойств
| Тип | Свойство | Описание |
|---|---|---|
ObjectProperty<Callback<ScheduledService<?>,Duration>> | backoffStrategy | Вычисляет количество времени, которое нужно добавить к периоду при каждой неудаче. |
ReadOnlyObjectProperty<Duration> | cumulativePeriod | Текущий кумулятивный период, используемый между итерациями. |
ReadOnlyIntegerProperty | currentFailureCount | Текущее количество раз, когда ScheduledService потерпел неудачу. |
ObjectProperty<Duration> | delay | Первоначальная задержка между началом работы ScheduledService и началом его выполнения. |
ReadOnlyObjectProperty<V> | lastValue | Последнее успешно вычисленное значение. |
ObjectProperty<Duration> | maximumCumulativePeriod | Максимально допустимое значение для cumulativePeriod. |
IntegerProperty | maximumFailureCount | Максимальное количество раз, когда ScheduledService может потерпеть неудачу, прежде чем перейдет в состояние FAILED. |
ObjectProperty<Duration> | period | Минимальное время, которое должно пройти между завершением последнего запуска и началом следующего запуска. |
BooleanProperty | restartOnFailure | Указывает, должен ли ScheduledService автоматически перезапускаться в случае ошибки в задаче. |
Свойства, объявленные в классе javafx.concurrent.Service
executor, onCancelled, onFailed, onReady, onRunning, onScheduled, onSucceeded
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе javafx.concurrent.Worker
Worker.State
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static Callback<ScheduledService<?>,Duration> | EXPONENTIAL_BACKOFF_STRATEGY | Реализация Callback для свойства backoffStrategy, которая обеспечит экспоненциальное уменьшение периода между повторными запусками в случае неудачи. |
static Callback<ScheduledService<?>,Duration> | LINEAR_BACKOFF_STRATEGY | Реализация Callback для свойства backoffStrategy, которая обеспечит линейное уменьшение периода между повторными запусками в случае неудачи. |
static Callback<ScheduledService<?>,Duration> | LOGARITHMIC_BACKOFF_STRATEGY | Реализация Callback для свойства backoffStrategy, которая обеспечит логарифмическое уменьшение периода между повторными запусками в случае неудачи. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ScheduledService() | Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ObjectProperty<Callback<ScheduledService<?>,Duration>> | backoffStrategyProperty() | Вычисляет количество времени, которое необходимо добавить к периоду при каждой неудаче. |
boolean | cancel() | Отменяет любые текущие выполняемые задачи и останавливает эту запланированную службу, так что дополнительные итерации не будут происходить. |
ReadOnlyObjectProperty<Duration> | cumulativePeriodProperty() | Текущий кумулятивный период, используемый между итерациями. |
ReadOnlyIntegerProperty | currentFailureCountProperty() | Текущее количество раз, когда ScheduledService потерпел неудачу. |
ObjectProperty<Duration> | delayProperty() | Начальная задержка между моментом начала работы ScheduledService и началом выполнения. |
protected void | failed() | Защищенный вспомогательный метод для подклассов, вызываемый всякий раз, когда состояние службы переходит в состояние FAILED. |
Callback<ScheduledService<?>,Duration> | getBackoffStrategy() | Получает значение свойства backoffStrategy. |
Duration | getCumulativePeriod() | Получает значение свойства cumulativePeriod. |
int | getCurrentFailureCount() | Получает значение свойства currentFailureCount. |
Duration | getDelay() | Получает значение свойства delay. |
V | getLastValue() | Получает значение свойства lastValue. |
Duration | getMaximumCumulativePeriod() | Получает значение свойства maximumCumulativePeriod. |
int | getMaximumFailureCount() | Получает значение свойства maximumFailureCount. |
Duration | getPeriod() | Получает значение свойства period. |
boolean | getRestartOnFailure() | Получает значение свойства restartOnFailure. |
ReadOnlyObjectProperty<V> | lastValueProperty() | Последнее успешно вычисленное значение. |
ObjectProperty<Duration> | maximumCumulativePeriodProperty() | Максимально допустимое значение для cumulativePeriod. |
IntegerProperty | maximumFailureCountProperty() | Максимальное количество раз, когда ScheduledService может потерпеть неудачу, прежде чем просто перейдет в состояние FAILED. |
ObjectProperty<Duration> | periodProperty() | Минимальное количество времени, которое должно пройти между завершением последнего запуска и началом следующего запуска. |
void | reset() | Сбрасывает службу. |
BooleanProperty | restartOnFailureProperty() | Указывает, должна ли ScheduledService автоматически перезапускаться в случае сбоя в задаче. |
void | setBackoffStrategy(Callback<ScheduledService<?>,Duration> value) | Устанавливает значение свойства backoffStrategy. |
void | setDelay(Duration value) | Устанавливает значение свойства delay. |
void | setMaximumCumulativePeriod(Duration value) | Устанавливает значение свойства maximumCumulativePeriod. |
void | setMaximumFailureCount(int value) | Устанавливает значение свойства maximumFailureCount. |
void | setPeriod(Duration value) | Устанавливает значение свойства period. |
void | setRestartOnFailure(boolean value) | Устанавливает значение свойства restartOnFailure. |
protected void | succeeded() | Защищенный вспомогательный метод для подклассов, вызываемый всякий раз, когда состояние службы переходит в состояние SUCCEEDED. |
Методы, объявленные в классе javafx.concurrent.Service
addEventFilter, addEventHandler, cancelled, createTask, executeTask, executorProperty, fireEvent, getExecutor, getOnCancelled, getOnFailed, getOnReady, getOnRunning, getOnScheduled, getOnSucceeded, onCancelledProperty, onFailedProperty, onReadyProperty, onRunningProperty, onScheduledProperty, onSucceededProperty, ready, removeEventFilter, removeEventHandler, restart, running, scheduled, setEventHandler, setExecutor, setOnCancelled, setOnFailed, setOnReady, setOnRunning, setOnScheduled, setOnSucceeded, start
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе javafx.event.EventTarget
buildEventDispatchChain
Методы, объявленные в интерфейсе javafx.concurrent.Worker
exceptionProperty, getException, getMessage, getProgress, getState, getTitle, getTotalWork, getValue, getWorkDone, isRunning, messageProperty, progressProperty, runningProperty, stateProperty, titleProperty, totalWorkProperty, valueProperty, workDoneProperty
Подробности свойств
задержка
public final ObjectProperty<Duration> delayProperty
Service.start() или Service.restart().- См. также:
-
getDelay(),setDelay(Duration)
период
public final ObjectProperty<Duration> periodProperty
cumulativePeriod) будет зависеть от этого свойства, а также от backoffStrategy и количества ошибок.- См. также:
-
getPeriod(),setPeriod(Duration)
стратегия_обратного_отката
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty
- См. также:
-
getBackoffStrategy(),setBackoffStrategy(Callback)
перезапуск_при_ошибке
public final BooleanProperty restartOnFailureProperty
- См. также:
-
getRestartOnFailure(),setRestartOnFailure(boolean)
максимальное_количество_ошибок
public final IntegerProperty maximumFailureCountProperty
- См. также:
-
getMaximumFailureCount(),setMaximumFailureCount(int)
текущее_количество_ошибок
public final ReadOnlyIntegerProperty currentFailureCountProperty
- См. также:
getCurrentFailureCount()
накопленный_период
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty
period, за исключением случаев ошибки, когда результат backoffStrategy используется как накопленный период после каждой ошибки. Сбрасывается при каждом ручном перезапуске ScheduledService или успешной итерации. cumulativePeriod изменяется, когда ScheduledService переходит в состояние scheduled. cumulativePeriod может быть ограничен путем установки maximumCumulativePeriod.- См. также:
getCumulativePeriod()
максимальный_накопленный_период
public final ObjectProperty<Duration> maximumCumulativePeriodProperty
- См. также:
-
getMaximumCumulativePeriod(),setMaximumCumulativePeriod(Duration)
последнее_значение
public final ReadOnlyObjectProperty<V> lastValueProperty
- См. также:
getLastValue()
Подробности полей
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)).
ЛОГАРИФМИЧЕСКАЯ_СТРАТЕГИЯ_ОБРАТНОГО_ОТКАТА
public static final Callback<ScheduledService<?>,Duration> LOGARITHMIC_BACKOFF_STRATEGY
backoffStrategy, которая будет логарифмически увеличивать период между повторными выполнениями в случае ошибки. Этот расчет использует исходный период и количество последовательных ошибок для вычисления значения обратного отката. Если service равно null, возвращается Duration.ZERO. Если период равен 0, результат этого метода будет просто Math.log1p(currentFailureCount). Во всех остальных случаях возвращаемое значение совпадает с period + (period * Math.log1p(currentFailureCount)).
ЛИНЕЙНАЯ_СТРАТЕГИЯ_ОБРАТНОГО_ОТКАТА
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()
- Описание свойства:
- Начальная задержка между запуском ScheduledService и началом его работы. Это время, в течение которого ScheduledService останется в состоянии SCHEDULED, прежде чем перейти в состояние RUNNING после нового вызова
Service.start()илиService.restart().
setDelay
public final void setDelay(Duration value)
- Описание свойства:
- Начальная задержка между запуском ScheduledService и началом его работы. Это время, в течение которого ScheduledService останется в состоянии SCHEDULED, прежде чем перейти в состояние RUNNING после нового вызова
Service.start()илиService.restart().
delayProperty
public final ObjectProperty<Duration> delayProperty()
Service.start() или Service.restart().- См. также:
-
getDelay(),setDelay(Duration)
getPeriod
public final Duration getPeriod()
- Описание свойства:
- Минимальное время, которое должно пройти между окончанием последнего выполнения и началом следующего. Фактический период (также известный как
cumulativePeriod) будет зависеть от этого свойства, а также отbackoffStrategyи количества ошибок.
setPeriod
public final void setPeriod(Duration value)
- Описание свойства:
- Минимальное время, которое должно пройти между окончанием последнего выполнения и началом следующего. Фактический период (также известный как
cumulativePeriod) будет зависеть от этого свойства, а также отbackoffStrategyи количества ошибок.
periodProperty
public final ObjectProperty<Duration> periodProperty()
cumulativePeriod) будет зависеть от этого свойства, а также от backoffStrategy и количества ошибок.- См. также:
-
getPeriod(),setPeriod(Duration)
getBackoffStrategy
public final Callback<ScheduledService<?>,Duration> getBackoffStrategy()
- Описание свойства:
- Вычисляет время, которое нужно добавить к периоду при каждой ошибке. Это накопительное значение сбрасывается каждый раз, когда ScheduledService перезапускается вручную.
setBackoffStrategy
public final void setBackoffStrategy(Callback<ScheduledService<?>,Duration> value)
- Описание свойства:
- Вычисляет количество времени, добавляемое к периоду при каждой ошибке. Это накопительное значение сбрасывается всякий раз, когда ScheduledService вручную перезапускается.
backoffStrategyProperty
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty()
- См. также:
-
getBackoffStrategy(),setBackoffStrategy(Callback)
getRestartOnFailure
public final boolean getRestartOnFailure()
- Описание свойства:
- Указывает, должен ли ScheduledService автоматически перезапускаться в случае ошибки в задаче (Task).
setRestartOnFailure
public final void setRestartOnFailure(boolean value)
- Описание свойства:
- Указывает, должен ли ScheduledService автоматически перезапускаться в случае ошибки в задаче (Task).
restartOnFailureProperty
public final BooleanProperty restartOnFailureProperty()
- См. также:
-
getRestartOnFailure(),setRestartOnFailure(boolean)
getMaximumFailureCount
public final int getMaximumFailureCount()
- Описание свойства:
- Максимальное количество попыток, которое ScheduledService может предпринять, прежде чем перейдет в состояние FAILED. Конечно, ScheduledService можно перезапустить вручную, что сбросит текущий счетчик.
setMaximumFailureCount
public final void setMaximumFailureCount(int value)
- Описание свойства:
- Максимальное количество попыток, которое ScheduledService может предпринять, прежде чем перейдет в состояние FAILED. Конечно, ScheduledService можно перезапустить вручную, что сбросит текущий счетчик.
maximumFailureCountProperty
public final IntegerProperty maximumFailureCountProperty()
- См. также:
-
getMaximumFailureCount(),setMaximumFailureCount(int)
getCurrentFailureCount
public final int getCurrentFailureCount()
- Описание свойства:
- Текущее количество попыток, предпринятых ScheduledService. Сбрасывается при каждом ручном перезапуске ScheduledService.
currentFailureCountProperty
public final ReadOnlyIntegerProperty currentFailureCountProperty()
- См. также:
getCurrentFailureCount()
getCumulativePeriod
public final Duration getCumulativePeriod()
- Описание свойства:
- Текущий накопительный период, используемый между итерациями. Будет таким же, как
period, за исключением случаев ошибки, когда результат backoffStrategy используется в качестве накопительного периода после каждой ошибки. Сбрасывается при каждом ручном перезапуске ScheduledService или успешной итерации. cumulativePeriod изменяется, когда ScheduledService переходит в запланированное состояние. cumulativePeriod может быть ограничен установкойmaximumCumulativePeriod.
cumulativePeriodProperty
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty()
period, за исключением случаев ошибки, когда результат backoffStrategy используется в качестве накопительного периода после каждой ошибки. Сбрасывается при каждом ручном перезапуске ScheduledService или успешной итерации. cumulativePeriod изменяется, когда ScheduledService переходит в запланированное состояние. cumulativePeriod может быть ограничен установкой maximumCumulativePeriod.- См. также:
getCumulativePeriod()
getMaximumCumulativePeriod
public final Duration getMaximumCumulativePeriod()
- Описание свойства:
- Максимально допустимое значение для cumulativePeriod. Установка этого значения поможет гарантировать, что в случае многократных ошибок алгоритм экспоненциального возврата не приведет к неразумно большим значениям для накопительного периода. Накопительный период гарантированно не будет больше этого значения. Если maximumCumulativePeriod отрицательный, то cumulativePeriod будет ограничен 0. Если maximumCumulativePeriod NaN или null, то он не повлияет на cumulativePeriod.
setMaximumCumulativePeriod
public final void setMaximumCumulativePeriod(Duration value)
- Описание свойства:
- Максимально допустимое значение для cumulativePeriod. Установка этого значения поможет гарантировать, что в случае многократных ошибок алгоритм экспоненциального возврата не приведет к неразумно большим значениям для накопительного периода. Накопительный период гарантированно не будет больше этого значения. Если maximumCumulativePeriod отрицательный, то cumulativePeriod будет ограничен 0. Если maximumCumulativePeriod NaN или null, то он не повлияет на cumulativePeriod.
maximumCumulativePeriodProperty
public final ObjectProperty<Duration> maximumCumulativePeriodProperty()
- См. также:
-
getMaximumCumulativePeriod(),setMaximumCumulativePeriod(Duration)
getLastValue
public final V getLastValue()
- Описание свойства:
- Последнее успешно вычисленное значение. Во время каждой итерации значение ScheduledService будет сброшено до null, как и в любом другом Service. Однако lastValue будет установлено в последнее успешно вычисленное значение, даже между итерациями. Сбрасывается при ручном вызове reset или restart.
lastValueProperty
public final ReadOnlyObjectProperty<V> lastValueProperty()
- См. также:
getLastValue()
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> - Возвращает:
- true, если текущая задача была отменена; false, если задача не была отменена. В любом случае ScheduledService прекратит итерации.
© 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.