- Type Parameters:
- V- The computed value of the ScheduledService
- All Implemented Interfaces:
- Worker<V>,- EventTarget
public abstract class ScheduledService<V> extends Service<V>
The ScheduledService is a Service which will automatically restart
 itself after a successful execution, and under some conditions will
 restart even in case of failure. A new ScheduledService begins in
 the READY state, just as a normal Service. After calling
 start or restart, the ScheduledService will
 enter the SCHEDULED state for the duration specified by delay.
 
Once RUNNING, the ScheduledService will execute its Task. On successful
 completion, the ScheduledService will transition to the SUCCEEDED state,
 and then to the READY state and back to the SCHEDULED state. The amount
 of time the ScheduledService will remain in this state depends on the
 amount of time between the last state transition to RUNNING, and the
 current time, and the period. In short, the period
 defines the minimum amount of time from the start of one run and the start of
 the next. If the previous execution completed before period expires,
 then the ScheduledService will remain in the SCHEDULED state until the period
 expires. If on the other hand the execution took longer than the
 specified period, then the ScheduledService will immediately transition
 back to RUNNING. 
If, while RUNNING, the ScheduledService's Task throws an error or in
 some other way ends up transitioning to FAILED, then the ScheduledService
 will either restart or quit, depending on the values for
 backoffStrategy, restartOnFailure, and
 maximumFailureCount.
If a failure occurs and restartOnFailure is false, then
 the ScheduledService will transition to FAILED and will stop. To restart
 a failed ScheduledService, you must call restart manually.
If a failure occurs and restartOnFailure is true, then
 the the ScheduledService may restart automatically. First,
 the result of calling backoffStrategy will become the
 new cumulativePeriod. In this way, after each failure, you can cause
 the service to wait a longer and longer period of time before restarting.
 Once the task completes successfully, the cumulativePeriod is reset to
 the value of period.
ScheduledService defines static EXPONENTIAL_BACKOFF_STRATEGY and LOGARITHMIC_BACKOFF_STRATEGY
 implementations, of which LOGARITHMIC_BACKOFF_STRATEGY is the default value for
 backoffStrategy. After maximumFailureCount is reached, the
 ScheduledService will transition to FAILED in exactly the same way as if
 restartOnFailure were false.
If the period or delay is changed while the
 ScheduledService is running, the new values will be taken into account on the
 next iteration. For example, if the period is increased, then the next time the
 ScheduledService enters the SCHEDULED state, the new period will be used.
 Likewise, if the delay is changed, the new value will be honored on
 the next restart or reset/start.
 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));
 Timing for this class is not absolutely reliable. A very busy event thread might introduce some timing lag into the beginning of the execution of the background Task, so very small values for the period or delay are likely to be inaccurate. A delay or period in the hundreds of milliseconds or larger should be fairly reliable.
The ScheduledService in its default configuration has a default period of 0 and a
 default delay of 0. This will cause the ScheduledService to execute the task immediately
 upon Service.start(), and re-executing immediately upon successful completion.
For this purposes of this class, any Duration that answers true to Duration.isUnknown()
 will treat that duration as if it were Duration.ZERO. Likewise, any Duration which answers true
 to Duration.isIndefinite() will be treated as if it were a duration of Double.MAX_VALUE
 milliseconds. Any null Duration is treated as Duration.ZERO. Any custom implementation of an backoff strategy
 callback must be prepared to handle these different potential values.
The ScheduledService introduces a new property called lastValue. The lastValue is the value that
 was last successfully computed. Because a Service clears its value property on each run, and
 because the ScheduledService will reschedule a run immediately after completion (unless it enters the
 cancelled or failed states), the value property is not overly useful on a ScheduledService. In most cases
 you will want to instead use the value returned by lastValue.
Service.ready(), Service.scheduled(), Service.running(), succeeded(),
 Service.cancelled(), and failed() methods are implemented in this class. Subclasses which also
 override these methods must take care to invoke the super implementation.- Since:
- JavaFX 8.0
- 
Property SummaryProperties Type Property Description ObjectProperty<Callback<ScheduledService<?>,Duration>>backoffStrategyComputes the amount of time to add to the period on each failure.ReadOnlyObjectProperty<Duration>cumulativePeriodThe current cumulative period in use between iterations.ReadOnlyIntegerPropertycurrentFailureCountThe current number of times the ScheduledService has failed.ObjectProperty<Duration>delayThe initial delay between when the ScheduledService is first started, and when it will begin operation.ReadOnlyObjectProperty<V>lastValueThe last successfully computed value.ObjectProperty<Duration>maximumCumulativePeriodThe maximum allowed value for the cumulativePeriod.IntegerPropertymaximumFailureCountThe maximum number of times the ScheduledService can fail before it simply ends in the FAILED state.ObjectProperty<Duration>periodThe minimum amount of time to allow between the start of the last run and the start of the next run.BooleanPropertyrestartOnFailureIndicates whether the ScheduledService should automatically restart in the case of a failure in the Task.
- 
Nested Class SummaryNested classes/interfaces inherited from interface javafx.concurrent.WorkerWorker.State
- 
Field SummaryFields Modifier and Type Field Description static Callback<ScheduledService<?>,Duration>EXPONENTIAL_BACKOFF_STRATEGYA Callback implementation for thebackoffStrategyproperty which will exponentially backoff the period between re-executions in the case of a failure.static Callback<ScheduledService<?>,Duration>LINEAR_BACKOFF_STRATEGYA Callback implementation for thebackoffStrategyproperty which will linearly backoff the period between re-executions in the case of a failure.static Callback<ScheduledService<?>,Duration>LOGARITHMIC_BACKOFF_STRATEGYA Callback implementation for thebackoffStrategyproperty which will logarithmically backoff the period between re-executions in the case of a failure.
- 
Constructor SummaryConstructors Constructor Description ScheduledService()Constructor for subclasses to call.
- 
Method SummaryModifier and Type Method Description ObjectProperty<Callback<ScheduledService<?>,Duration>>backoffStrategyProperty()Computes the amount of time to add to the period on each failure.booleancancel()Cancels any currently running task and stops this scheduled service, such that no additional iterations will occur.ReadOnlyObjectProperty<Duration>cumulativePeriodProperty()The current cumulative period in use between iterations.ReadOnlyIntegerPropertycurrentFailureCountProperty()The current number of times the ScheduledService has failed.ObjectProperty<Duration>delayProperty()The initial delay between when the ScheduledService is first started, and when it will begin operation.protected voidexecuteTask(Task<V> task)Uses theexecutordefined on this Service to execute the given task.protected voidfailed()A protected convenience method for subclasses, called whenever the state of the Service has transitioned to the FAILED state.Callback<ScheduledService<?>,Duration>getBackoffStrategy()Gets the value of the property backoffStrategy.DurationgetCumulativePeriod()Gets the value of the property cumulativePeriod.intgetCurrentFailureCount()Gets the value of the property currentFailureCount.DurationgetDelay()Gets the value of the property delay.VgetLastValue()Gets the value of the property lastValue.DurationgetMaximumCumulativePeriod()Gets the value of the property maximumCumulativePeriod.intgetMaximumFailureCount()Gets the value of the property maximumFailureCount.DurationgetPeriod()Gets the value of the property period.booleangetRestartOnFailure()Gets the value of the property restartOnFailure.ReadOnlyObjectProperty<V>lastValueProperty()The last successfully computed value.ObjectProperty<Duration>maximumCumulativePeriodProperty()The maximum allowed value for the cumulativePeriod.IntegerPropertymaximumFailureCountProperty()The maximum number of times the ScheduledService can fail before it simply ends in the FAILED state.ObjectProperty<Duration>periodProperty()The minimum amount of time to allow between the start of the last run and the start of the next run.voidreset()Resets the Service.BooleanPropertyrestartOnFailureProperty()Indicates whether the ScheduledService should automatically restart in the case of a failure in the Task.voidsetBackoffStrategy(Callback<ScheduledService<?>,Duration> value)Sets the value of the property backoffStrategy.voidsetDelay(Duration value)Sets the value of the property delay.voidsetMaximumCumulativePeriod(Duration value)Sets the value of the property maximumCumulativePeriod.voidsetMaximumFailureCount(int value)Sets the value of the property maximumFailureCount.voidsetPeriod(Duration value)Sets the value of the property period.voidsetRestartOnFailure(boolean value)Sets the value of the property restartOnFailure.protected voidsucceeded()A protected convenience method for subclasses, called whenever the state of the Service has transitioned to the SUCCEEDED state.Methods inherited from class javafx.concurrent.ServiceaddEventFilter, addEventHandler, buildEventDispatchChain, cancelled, createTask, exceptionProperty, 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
- 
Property Details- 
delayThe initial delay between when the ScheduledService is first started, and when it will begin operation. This is the amount of time the ScheduledService will remain in the SCHEDULED state, before entering the RUNNING state, following a fresh invocation ofService.start()orService.restart().- See Also:
- getDelay(),- setDelay(Duration)
 
- 
periodThe minimum amount of time to allow between the start of the last run and the start of the next run. The actual period (also known ascumulativePeriod) will depend on this property as well as thebackoffStrategyand number of failures.- See Also:
- getPeriod(),- setPeriod(Duration)
 
- 
backoffStrategyComputes the amount of time to add to the period on each failure. This cumulative amount is reset whenever the the ScheduledService is manually restarted.- See Also:
- getBackoffStrategy(),- setBackoffStrategy(Callback)
 
- 
restartOnFailureIndicates whether the ScheduledService should automatically restart in the case of a failure in the Task.
- 
maximumFailureCountThe maximum number of times the ScheduledService can fail before it simply ends in the FAILED state. You can of course restart the ScheduledService manually, which will cause the current count to be reset.
- 
currentFailureCountThe current number of times the ScheduledService has failed. This is reset whenever the ScheduledService is manually restarted.- See Also:
- getCurrentFailureCount()
 
- 
cumulativePeriodThe current cumulative period in use between iterations. This will be the same asperiod, except after a failure, in which case the result of the backoffStrategy will be used as the cumulative period following each failure. This is reset whenever the ScheduledService is manually restarted or an iteration is successful. The cumulativePeriod is modified when the ScheduledService enters the scheduled state. The cumulativePeriod can be capped by setting themaximumCumulativePeriod.- See Also:
- getCumulativePeriod()
 
- 
maximumCumulativePeriodThe maximum allowed value for the cumulativePeriod. Setting this value will help ensure that in the case of repeated failures the back-off algorithm doesn't end up producing unreasonably large values for cumulative period. The cumulative period is guaranteed not to be any larger than this value. If the maximumCumulativePeriod is negative, then cumulativePeriod will be capped at 0. If maximumCumulativePeriod is NaN or null, then it will not influence the cumulativePeriod.
- 
lastValueThe last successfully computed value. During each iteration, the "value" of the ScheduledService will be reset to null, as with any other Service. The "lastValue" however will be set to the most recently successfully computed value, even across iterations. It is reset however whenever you manually call reset or restart.- See Also:
- getLastValue()
 
 
- 
- 
Field Details- 
EXPONENTIAL_BACKOFF_STRATEGYA Callback implementation for thebackoffStrategyproperty which will exponentially backoff the period between re-executions in the case of a failure. This computation takes the original period and the number of consecutive failures and computes the backoff amount from that information.If the serviceis null, then Duration.ZERO is returned. If the period is 0 then the result of this method will simply beMath.exp(currentFailureCount). In all other cases, the returned value is the same asperiod + (period * Math.exp(currentFailureCount)).
- 
LOGARITHMIC_BACKOFF_STRATEGYA Callback implementation for thebackoffStrategyproperty which will logarithmically backoff the period between re-executions in the case of a failure. This computation takes the original period and the number of consecutive failures and computes the backoff amount from that information.If the serviceis null, then Duration.ZERO is returned. If the period is 0 then the result of this method will simply beMath.log1p(currentFailureCount). In all other cases, the returned value is the same asperiod + (period * Math.log1p(currentFailureCount)).
- 
LINEAR_BACKOFF_STRATEGYA Callback implementation for thebackoffStrategyproperty which will linearly backoff the period between re-executions in the case of a failure. This computation takes the original period and the number of consecutive failures and computes the backoff amount from that information.If the serviceis null, then Duration.ZERO is returned. If the period is 0 then the result of this method will simply becurrentFailureCount. In all other cases, the returned value is the same asperiod + (period * currentFailureCount).
 
- 
- 
Constructor Details- 
ScheduledServicepublic ScheduledService()Constructor for subclasses to call.
 
- 
- 
Method Details- 
getDelayGets the value of the property delay.- Property description:
- The initial delay between when the ScheduledService is first started, and when it will begin
 operation. This is the amount of time the ScheduledService will remain in the SCHEDULED state,
 before entering the RUNNING state, following a fresh invocation of Service.start()orService.restart().
 
- 
setDelaySets the value of the property delay.- Property description:
- The initial delay between when the ScheduledService is first started, and when it will begin
 operation. This is the amount of time the ScheduledService will remain in the SCHEDULED state,
 before entering the RUNNING state, following a fresh invocation of Service.start()orService.restart().
 
- 
delayPropertyThe initial delay between when the ScheduledService is first started, and when it will begin operation. This is the amount of time the ScheduledService will remain in the SCHEDULED state, before entering the RUNNING state, following a fresh invocation ofService.start()orService.restart().- See Also:
- getDelay(),- setDelay(Duration)
 
- 
getPeriodGets the value of the property period.- Property description:
- The minimum amount of time to allow between the start of the last run and the start of the next run.
 The actual period (also known as cumulativePeriod) will depend on this property as well as thebackoffStrategyand number of failures.
 
- 
setPeriodSets the value of the property period.- Property description:
- The minimum amount of time to allow between the start of the last run and the start of the next run.
 The actual period (also known as cumulativePeriod) will depend on this property as well as thebackoffStrategyand number of failures.
 
- 
periodPropertyThe minimum amount of time to allow between the start of the last run and the start of the next run. The actual period (also known ascumulativePeriod) will depend on this property as well as thebackoffStrategyand number of failures.- See Also:
- getPeriod(),- setPeriod(Duration)
 
- 
getBackoffStrategyGets the value of the property backoffStrategy.- Property description:
- Computes the amount of time to add to the period on each failure. This cumulative amount is reset whenever the the ScheduledService is manually restarted.
 
- 
setBackoffStrategySets the value of the property backoffStrategy.- Property description:
- Computes the amount of time to add to the period on each failure. This cumulative amount is reset whenever the the ScheduledService is manually restarted.
 
- 
backoffStrategyPropertyComputes the amount of time to add to the period on each failure. This cumulative amount is reset whenever the the ScheduledService is manually restarted.- See Also:
- getBackoffStrategy(),- setBackoffStrategy(Callback)
 
- 
getRestartOnFailurepublic final boolean getRestartOnFailure()Gets the value of the property restartOnFailure.- Property description:
- Indicates whether the ScheduledService should automatically restart in the case of a failure in the Task.
 
- 
setRestartOnFailurepublic final void setRestartOnFailure(boolean value)Sets the value of the property restartOnFailure.- Property description:
- Indicates whether the ScheduledService should automatically restart in the case of a failure in the Task.
 
- 
restartOnFailurePropertyIndicates whether the ScheduledService should automatically restart in the case of a failure in the Task.
- 
getMaximumFailureCountpublic final int getMaximumFailureCount()Gets the value of the property maximumFailureCount.- Property description:
- The maximum number of times the ScheduledService can fail before it simply ends in the FAILED state. You can of course restart the ScheduledService manually, which will cause the current count to be reset.
 
- 
setMaximumFailureCountpublic final void setMaximumFailureCount(int value)Sets the value of the property maximumFailureCount.- Property description:
- The maximum number of times the ScheduledService can fail before it simply ends in the FAILED state. You can of course restart the ScheduledService manually, which will cause the current count to be reset.
 
- 
maximumFailureCountPropertyThe maximum number of times the ScheduledService can fail before it simply ends in the FAILED state. You can of course restart the ScheduledService manually, which will cause the current count to be reset.
- 
getCurrentFailureCountpublic final int getCurrentFailureCount()Gets the value of the property currentFailureCount.- Property description:
- The current number of times the ScheduledService has failed. This is reset whenever the ScheduledService is manually restarted.
 
- 
currentFailureCountPropertyThe current number of times the ScheduledService has failed. This is reset whenever the ScheduledService is manually restarted.- See Also:
- getCurrentFailureCount()
 
- 
getCumulativePeriodGets the value of the property cumulativePeriod.- Property description:
- The current cumulative period in use between iterations. This will be the same as period, except after a failure, in which case the result of the backoffStrategy will be used as the cumulative period following each failure. This is reset whenever the ScheduledService is manually restarted or an iteration is successful. The cumulativePeriod is modified when the ScheduledService enters the scheduled state. The cumulativePeriod can be capped by setting themaximumCumulativePeriod.
 
- 
cumulativePeriodPropertyThe current cumulative period in use between iterations. This will be the same asperiod, except after a failure, in which case the result of the backoffStrategy will be used as the cumulative period following each failure. This is reset whenever the ScheduledService is manually restarted or an iteration is successful. The cumulativePeriod is modified when the ScheduledService enters the scheduled state. The cumulativePeriod can be capped by setting themaximumCumulativePeriod.- See Also:
- getCumulativePeriod()
 
- 
getMaximumCumulativePeriodGets the value of the property maximumCumulativePeriod.- Property description:
- The maximum allowed value for the cumulativePeriod. Setting this value will help ensure that in the case of repeated failures the back-off algorithm doesn't end up producing unreasonably large values for cumulative period. The cumulative period is guaranteed not to be any larger than this value. If the maximumCumulativePeriod is negative, then cumulativePeriod will be capped at 0. If maximumCumulativePeriod is NaN or null, then it will not influence the cumulativePeriod.
 
- 
setMaximumCumulativePeriodSets the value of the property maximumCumulativePeriod.- Property description:
- The maximum allowed value for the cumulativePeriod. Setting this value will help ensure that in the case of repeated failures the back-off algorithm doesn't end up producing unreasonably large values for cumulative period. The cumulative period is guaranteed not to be any larger than this value. If the maximumCumulativePeriod is negative, then cumulativePeriod will be capped at 0. If maximumCumulativePeriod is NaN or null, then it will not influence the cumulativePeriod.
 
- 
maximumCumulativePeriodPropertyThe maximum allowed value for the cumulativePeriod. Setting this value will help ensure that in the case of repeated failures the back-off algorithm doesn't end up producing unreasonably large values for cumulative period. The cumulative period is guaranteed not to be any larger than this value. If the maximumCumulativePeriod is negative, then cumulativePeriod will be capped at 0. If maximumCumulativePeriod is NaN or null, then it will not influence the cumulativePeriod.
- 
getLastValueGets the value of the property lastValue.- Property description:
- The last successfully computed value. During each iteration, the "value" of the ScheduledService will be reset to null, as with any other Service. The "lastValue" however will be set to the most recently successfully computed value, even across iterations. It is reset however whenever you manually call reset or restart.
 
- 
lastValuePropertyThe last successfully computed value. During each iteration, the "value" of the ScheduledService will be reset to null, as with any other Service. The "lastValue" however will be set to the most recently successfully computed value, even across iterations. It is reset however whenever you manually call reset or restart.- See Also:
- getLastValue()
 
- 
executeTaskDescription copied from class:ServiceUses the executordefined on this Service to execute the given task. If theexecutoris null, then a default executor is used which will create a new daemon thread on which to execute this task.This method is intended only to be called by the Service implementation. - Overrides:
- executeTaskin class- Service<V>
- Parameters:
- task- a non-null task to execute
 
- 
succeededprotected void succeeded()A protected convenience method for subclasses, called whenever the state of the Service has transitioned to the SUCCEEDED state. This method is invoked after the Service has been fully transitioned to the new state. Implementation Note: Subclasses which override this method must call this super implementation.
- 
failedprotected void failed()A protected convenience method for subclasses, called whenever the state of the Service has transitioned to the FAILED state. This method is invoked after the Service has been fully transitioned to the new state. Implementation Note: Subclasses which override this method must call this super implementation.
- 
resetpublic void reset()Resets the Service. May only be called while in one of the finish states, that is, SUCCEEDED, FAILED, or CANCELLED, or when READY. This method should only be called on the FX application thread. Implementation Note: Subclasses which override this method must call this super implementation.
- 
cancelpublic boolean cancel()Cancels any currently running task and stops this scheduled service, such that no additional iterations will occur.
 
-