- java.lang.Object
-
- javafx.concurrent.Service<V>
-
- javafx.concurrent.ScheduledService<V>
-
- 参数类型
-
V
- 计算的ScheduledService值
- All Implemented Interfaces:
-
Worker<V>
,EventTarget
public abstract class ScheduledService<V> extends Service<V>
ScheduledService是一个
Service
,它将在成功执行后自动重新启动,并且在某些情况下即使发生故障也将重新启动。 一个新的ScheduledService开始于READY状态,就像普通的Service一样。 调用start
或restart
,ScheduledService将在delay
指定的时间内进入SCHEDULED状态。一旦运行,ScheduledService将执行其任务。 成功完成后,ScheduledService将转换到SUCCEEDED状态,然后进入READY状态并返回到SCHEDULED状态。 计划服务将保持在此状态的时间取决于最后一次状态转换到运行时间与当前时间之间的时间量,以及
period
。 简而言之,period
定义了从一次运行开始和下一个运行开始的最短时间。 如果之前的执行在period
之前完成,则ScheduledService将保持在SCHEDULED状态,直到期限到期。 另一方面,如果执行时间比指定的时间长,则ScheduledService将立即转换回运行。如果,在运行时,ScheduledService的任务将引发错误或以其他方式结束了过渡失败,那么ScheduledService要么重新启动或退出,这取决于值
backoffStrategy
,restartOnFailure
,并maximumFailureCount
。如果发生故障,并且
restartOnFailure
为假,则ScheduledService将转换到FAILED并停止。 要重新启动失败的ScheduledService,您必须手动调用重新启动。如果发生故障,并且
restartOnFailure
为真,则ScheduledService 可能会自动重新启动。 首先,调用backoffStrategy
的结果将成为新的cumulativePeriod
。 以这种方式,在每次故障之后,您可以使服务等待更长时间更长的时间,然后再重新启动。 一旦任务成功完成,cumulativePeriod将重置为period
的值。ScheduledService定义了静态EXPONENTIAL_BACKOFF_STRATEGY和LOGARITHMIC_BACKOFF_STRATEGY实现,其中LOGARITHMIC_BACKOFF_STRATEGY是backoffStrategy的默认值。 在达到
maximumFailureCount
之后,ScheduledService将以与错误restartOnFailure
完全相同的方式转换为FAILED。如果在ScheduledService运行时更改了
ScheduledService通常用于涉及轮询的用例。 例如,您可能需要定期ping服务器,以查看是否有任何更新。 如ScheduledService可能会像这样实现:period
或delay
,则在下一次迭代时将考虑新值。 例如,如果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));
这个班的时间并不是绝对可靠的。 一个非常忙碌的事件线程可能会在执行后台任务的开始时引入一些时间滞后,因此周期或延迟的非常小的值可能不准确。 延迟或数百毫秒或更长的时间段应该是相当可靠的。
默认配置中的ScheduledService的默认
period
,默认delay
为0.这将导致ScheduledService在Service.start()
上立即执行任务,并在成功完成后立即重新执行。为了这个课程的目的,任何答案为
Duration.isUnknown()
的任何持续时间将视为持续时间。 同样,任何对Duration.isIndefinite()
回答的持续时间将被视为Double.MAX_VALUE毫秒的持续时间。 任何null持续时间被视为Duration.ZERO。 必须准备退避策略回调的任何自定义实现来处理这些不同的潜在值。ScheduledService引入了一个名为
实施者注:lastValue
的新属性。 lastValue是最后一次成功计算的值。 因为服务在每次运行时清除其value
属性,并且由于ScheduledService将在完成后立即重新计划运行(除非进入已取消或失败的状态),所以value属性对于ScheduledService不是太有用。 在大多数情况下,您将要使用lastValue返回的值。Service.ready()
,Service.scheduled()
,Service.running()
,succeeded()
,Service.cancelled()
,并failed()
方法在这个类中实现。 也覆盖这些方法的子类必须注意调用超级实现。- 从以下版本开始:
- JavaFX 8.0
-
-
Property Summary
Properties Type Property 描述 ObjectProperty<Callback<ScheduledService<?>,Duration>>
backoffStrategy
计算在每次故障时添加到期间的时间量。ReadOnlyObjectProperty<Duration>
cumulativePeriod
迭代之间使用的当前累积周期。ReadOnlyIntegerProperty
currentFailureCount
当前ScheduledService失败的次数。ObjectProperty<Duration>
delay
首次启动ScheduledService之间的初始延迟,以及何时开始运行。ReadOnlyObjectProperty<V>
lastValue
最后成功计算的值。ObjectProperty<Duration>
maximumCumulativePeriod
累积百分比的最大允许值。IntegerProperty
maximumFailureCount
在完成FAILED状态之前,ScheduledService可以失败的最大次数。ObjectProperty<Duration>
period
允许在最后一次运行开始和下次运行开始之间的最短时间。BooleanProperty
restartOnFailure
指示在Task中出现故障时,ScheduledService是否应自动重新启动。
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface javafx.concurrent.Worker
Worker.State
-
-
Field Summary
Fields Modifier and Type Field 描述 static Callback<ScheduledService<?>,Duration>
EXPONENTIAL_BACKOFF_STRATEGY
backoffStrategy
属性的回调实现将在失败的情况下以指数方式backoffStrategy
重新执行之间的时间段。static Callback<ScheduledService<?>,Duration>
LINEAR_BACKOFF_STRATEGY
backoffStrategy
属性的回调实现将在失败的情况backoffStrategy
性地回退重新执行之间的时间段。static Callback<ScheduledService<?>,Duration>
LOGARITHMIC_BACKOFF_STRATEGY
backoffStrategy
属性的回调实现将在失败的情况下对数地退避重新执行之间的期间。
-
构造方法摘要
构造方法 Constructor 描述 ScheduledService()
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 ObjectProperty<Callback<ScheduledService<?>,Duration>>
backoffStrategyProperty()
计算在每次故障时添加到期间的时间量。boolean
cancel()
取消任何当前正在运行的任务并停止此计划的服务,这样就不会发生额外的迭代。ReadOnlyObjectProperty<Duration>
cumulativePeriodProperty()
迭代之间使用的当前累积周期。ReadOnlyIntegerProperty
currentFailureCountProperty()
当前ScheduledService失败的次数。ObjectProperty<Duration>
delayProperty()
首次启动ScheduledService之间的初始延迟,以及何时开始运行。protected void
executeTask(Task<V> task)
使用此服务上定义的executor
执行给定的任务。protected void
failed()
对于子类的受保护的便利方法,只要服务状态已经转换到FAILED状态。Callback<ScheduledService<?>,Duration>
getBackoffStrategy()
获取属性backoffStrategy的值。Duration
getCumulativePeriod()
获取属性cumulativePeriod的值。int
getCurrentFailureCount()
获取属性currentFailureCount的值。Duration
getDelay()
获取属性延迟的值。V
getLastValue()
获取属性lastValue的值。Duration
getMaximumCumulativePeriod()
获取属性maximumCumulativePeriod的值。int
getMaximumFailureCount()
获取属性maximumFailureCount的值。Duration
getPeriod()
获取属性期间的值。boolean
getRestartOnFailure()
获取属性restartOnFailure的值。ReadOnlyObjectProperty<V>
lastValueProperty()
最后成功计算的值。ObjectProperty<Duration>
maximumCumulativePeriodProperty()
累积百分比的最大允许值。IntegerProperty
maximumFailureCountProperty()
在完成FAILED状态之前,ScheduledService可以失败的最大次数。ObjectProperty<Duration>
periodProperty()
允许在最后一次运行开始和下次运行开始之间的最短时间。void
reset()
重置服务。BooleanProperty
restartOnFailureProperty()
指示在Task中出现故障时,ScheduledService是否应自动重新启动。void
setBackoffStrategy(Callback<ScheduledService<?>,Duration> value)
设置属性backoffStrategy的值。void
setDelay(Duration value)
设置属性延迟的值。void
setMaximumCumulativePeriod(Duration value)
设置属性maximumCumulativePeriod的值。void
setMaximumFailureCount(int value)
设置属性maximumFailureCount的值。void
setPeriod(Duration value)
设置属性周期的值。void
setRestartOnFailure(boolean value)
设置属性restartOnFailure的值。protected void
succeeded()
对于子类的受保护的便利方法,当服务状态已转换到SUCCEEDED状态时调用。-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from class javafx.concurrent.Service
addEventFilter, 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 Detail
-
delay
public final ObjectProperty<Duration> delayProperty
首次启动ScheduledService之间的初始延迟,以及何时开始运行。 这是在新的调用Service.start()
或Service.restart()
之后,在进入RUNNING状态之前,ScheduledService将保持在SCHEDULED状态的时间。- 另请参见:
-
getDelay()
,setDelay(Duration)
-
period
public final ObjectProperty<Duration> periodProperty
允许在最后一次运行开始和下次运行开始之间的最短时间。 实际期间(也称为cumulativePeriod
)将取决于此属性以及backoffStrategy
和故障次数。- 另请参见:
-
getPeriod()
,setPeriod(Duration)
-
backoffStrategy
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty
计算在每次故障时添加到期间的时间量。 每当手动重新启动ScheduledService时,这个累积金额将被重置。
-
restartOnFailure
public final BooleanProperty restartOnFailureProperty
指示在Task中出现故障时,ScheduledService是否应自动重新启动。
-
maximumFailureCount
public final IntegerProperty maximumFailureCountProperty
在完成FAILED状态之前,ScheduledService可以失败的最大次数。 您当然可以手动重新启动ScheduledService,这将导致当前计数被重置。
-
currentFailureCount
public final ReadOnlyIntegerProperty currentFailureCountProperty
当前ScheduledService失败的次数。 每当手动重新启动ScheduledService时,都会重新启动。- 另请参见:
-
getCurrentFailureCount()
-
cumulativePeriod
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty
迭代之间使用的当前累积周期。 这将与period
相同,除了失败之后,在这种情况下,backoffStrategy的结果将被用作每个故障后的累积周期。 每当手动重新启动ScheduledService或迭代成功时,都会重新设置。 当ScheduledService进入计划状态时,累积周期被修改。 累积maximumCumulativePeriod
可以通过设置maximumCumulativePeriod
加以限制。- 另请参见:
-
getCumulativePeriod()
-
maximumCumulativePeriod
public final ObjectProperty<Duration> maximumCumulativePeriodProperty
累积百分比的最大允许值。 设置此值将有助于确保在重复故障的情况下,退避算法不会最终在累积周期内产生不合理的较大值。 累积期限不得大于该值。 如果maximumCumulativePeriod为负,那么cumulativePeriod将被限制为0.如果maximumCumulativePeriod为NaN或为null,则不会影响累积周期。
-
lastValue
public final ReadOnlyObjectProperty<V> lastValueProperty
最后成功计算的值。 在每次迭代期间,与任何其他服务一样,ScheduledService的“值”将重置为null。 然而,“lastValue”将被设置为最近成功计算的值,甚至跨越迭代。 无论何时手动调用重置或重新启动,它都会被重置。- 另请参见:
-
getLastValue()
-
-
字段详细信息
-
EXPONENTIAL_BACKOFF_STRATEGY
public static final Callback<ScheduledService<?>,Duration> EXPONENTIAL_BACKOFF_STRATEGY
backoffStrategy
属性的回调实现将在失败的情况下以指数方式backoffStrategy
重新执行之间的时间段。 该计算采用原始周期和连续故障的数量,并从该信息计算退避量。如果
service
为空,则返回Duration.ZERO。 如果期限为0,则此方法的结果将为Math.exp(currentFailureCount)
。 在所有其他情况下,返回值与period + (period * Math.exp(currentFailureCount))
相同。
-
LOGARITHMIC_BACKOFF_STRATEGY
public static final Callback<ScheduledService<?>,Duration> LOGARITHMIC_BACKOFF_STRATEGY
backoffStrategy
属性的回调实现将在失败的情况下对数地backoffStrategy
重新执行之间的时间段。 该计算采用原始周期和连续故障的数量,并从该信息计算退避量。如果
service
为空,则返回Duration.ZERO。 如果期间为0,则该方法的结果将为Math.log1p(currentFailureCount)
。 在所有其他情况下,返回值与period + (period * Math.log1p(currentFailureCount))
相同。
-
LINEAR_BACKOFF_STRATEGY
public static final Callback<ScheduledService<?>,Duration> LINEAR_BACKOFF_STRATEGY
backoffStrategy
属性的回调实现将在失败的情况backoffStrategy
性地回退重新执行之间的时间段。 该计算采用原始周期和连续故障的数量,并从该信息计算退避量。如果
service
为空,则返回Duration.ZERO。 如果期限为0,则此方法的结果将为currentFailureCount
。 在所有其他情况下,返回值与period + (period * currentFailureCount)
相同。
-
-
方法详细信息
-
getDelay
public final Duration getDelay()
获取属性延迟的值。- Property description:
-
首次启动ScheduledService之间的初始延迟,以及何时开始运行。
这是在新的调用
Service.start()
或Service.restart()
之后,在进入RUNNING状态之前,ScheduledService将保持在SCHEDULED状态的时间。
-
setDelay
public final void setDelay(Duration value)
设置属性延迟的值。- Property description:
-
首次启动ScheduledService之间的初始延迟,以及何时开始运行。
这是在新的调用
Service.start()
或Service.restart()
之后,在进入RUNNING状态之前,ScheduledService将保持在SCHEDULED状态的时间。
-
delayProperty
public final ObjectProperty<Duration> delayProperty()
首次启动ScheduledService之间的初始延迟,以及何时开始运行。 这是在新的调用Service.start()
或Service.restart()
之后,在进入RUNNING状态之前,ScheduledService将保持在SCHEDULED状态的时间。- 另请参见:
-
getDelay()
,setDelay(Duration)
-
getPeriod
public final Duration getPeriod()
获取属性期间的值。- Property description:
-
允许在最后一次运行开始和下次运行开始之间的最短时间。
实际期间(也称为
cumulativePeriod
)将取决于此属性以及backoffStrategy
和故障次数。
-
setPeriod
public final void setPeriod(Duration value)
设置属性周期的值。- Property description:
-
允许在最后一次运行开始和下次运行开始之间的最短时间。
实际期间(也称为
cumulativePeriod
)将取决于此属性以及backoffStrategy
和故障次数。
-
periodProperty
public final ObjectProperty<Duration> periodProperty()
允许在最后一次运行开始和下次运行开始之间的最短时间。 实际期间(也称为cumulativePeriod
)将取决于此属性以及backoffStrategy
和故障次数。- 另请参见:
-
getPeriod()
,setPeriod(Duration)
-
getBackoffStrategy
public final Callback<ScheduledService<?>,Duration> getBackoffStrategy()
获取属性backoffStrategy的值。- Property description:
- 计算在每次故障时添加到期间的时间量。 每当手动重新启动ScheduledService时,这个累积金额将被重置。
-
setBackoffStrategy
public final void setBackoffStrategy(Callback<ScheduledService<?>,Duration> value)
设置属性backoffStrategy的值。- Property description:
- 计算在每次故障时添加到期间的时间量。 每当手动重新启动ScheduledService时,这个累积金额将被重置。
-
backoffStrategyProperty
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty()
计算在每次故障时添加到期间的时间量。 每当手动重新启动ScheduledService时,这个累积金额将被重置。
-
getRestartOnFailure
public final boolean getRestartOnFailure()
获取属性restartOnFailure的值。- Property description:
- 指示在Task中出现故障时,ScheduledService是否应自动重新启动。
-
setRestartOnFailure
public final void setRestartOnFailure(boolean value)
设置属性restartOnFailure的值。- Property description:
- 指示在Task中出现故障时,ScheduledService是否应自动重新启动。
-
restartOnFailureProperty
public final BooleanProperty restartOnFailureProperty()
指示在Task中出现故障时,ScheduledService是否应自动重新启动。
-
getMaximumFailureCount
public final int getMaximumFailureCount()
获取属性maximumFailureCount的值。- Property description:
- 在完成FAILED状态之前,ScheduledService可以失败的最大次数。 您当然可以手动重新启动ScheduledService,这将导致当前计数被重置。
-
setMaximumFailureCount
public final void setMaximumFailureCount(int value)
设置属性maximumFailureCount的值。- Property description:
- 在完成FAILED状态之前,ScheduledService可以失败的最大次数。 您当然可以手动重新启动ScheduledService,这将导致当前计数被重置。
-
maximumFailureCountProperty
public final IntegerProperty maximumFailureCountProperty()
在完成FAILED状态之前,ScheduledService可以失败的最大次数。 您当然可以手动重新启动ScheduledService,这将导致当前计数被重置。
-
getCurrentFailureCount
public final int getCurrentFailureCount()
获取属性currentFailureCount的值。- Property description:
- 当前ScheduledService失败的次数。 每当手动重新启动ScheduledService时,都会重新启动。
-
currentFailureCountProperty
public final ReadOnlyIntegerProperty currentFailureCountProperty()
当前ScheduledService失败的次数。 每当手动重新启动ScheduledService时,都会重新启动。- 另请参见:
-
getCurrentFailureCount()
-
getCumulativePeriod
public final Duration getCumulativePeriod()
获取属性cumulativePeriod的值。- Property description:
-
迭代之间使用的当前累积周期。
这将与
period
相同,除了失败之后,在这种情况下,backoffStrategy的结果将被用作每次故障后的累积周期。 每当手动重新启动ScheduledService或迭代成功时,都会重新设置。 当ScheduledService进入计划状态时,累积周期被修改。 累积maximumCumulativePeriod
可以通过设置maximumCumulativePeriod
加以限制。
-
cumulativePeriodProperty
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty()
迭代之间使用的当前累积周期。 这将与period
相同,除了失败之后,在这种情况下,backoffStrategy的结果将被用作每次故障后的累积周期。 每当手动重新启动ScheduledService或迭代成功时,都会重新设置。 当ScheduledService进入计划状态时,累积周期被修改。 累积maximumCumulativePeriod
可以通过设置maximumCumulativePeriod
加以限制。- 另请参见:
-
getCumulativePeriod()
-
getMaximumCumulativePeriod
public final Duration getMaximumCumulativePeriod()
获取属性maximumCumulativePeriod的值。- Property description:
- 累积百分比的最大允许值。 设置此值将有助于确保在重复故障的情况下,退避算法不会最终在累积周期内产生不合理的较大值。 累积期限不得大于该值。 如果maximumCumulativePeriod为负,那么cumulativePeriod将被限制为0.如果maximumCumulativePeriod为NaN或为null,则不会影响累积周期。
-
setMaximumCumulativePeriod
public final void setMaximumCumulativePeriod(Duration value)
设置属性maximumCumulativePeriod的值。- Property description:
- 累积百分比的最大允许值。 设置此值将有助于确保在重复故障的情况下,退避算法不会最终在累积周期内产生不合理的较大值。 累积期限不得大于该值。 如果maximumCumulativePeriod为负,那么cumulativePeriod将被限制为0.如果maximumCumulativePeriod为NaN或为null,则不会影响累积周期。
-
maximumCumulativePeriodProperty
public final ObjectProperty<Duration> maximumCumulativePeriodProperty()
累积百分比的最大允许值。 设置此值将有助于确保在重复故障的情况下,退避算法不会最终在累积周期内产生不合理的较大值。 累积期限不得大于该值。 如果maximumCumulativePeriod为负,那么cumulativePeriod将被限制为0.如果maximumCumulativePeriod为NaN或为null,则不会影响累积周期。
-
getLastValue
public final V getLastValue()
获取属性lastValue的值。- Property description:
- 最后成功计算的值。 在每次迭代期间,与任何其他服务一样,ScheduledService的“值”将重置为null。 然而,“lastValue”将被设置为最近成功计算的值,甚至跨越迭代。 无论何时手动调用重置或重新启动,它都会被重置。
-
lastValueProperty
public final ReadOnlyObjectProperty<V> lastValueProperty()
最后成功计算的值。 在每次迭代期间,与任何其他服务一样,ScheduledService的“值”将重置为null。 然而,“lastValue”将被设置为最近成功计算的值,甚至跨越迭代。 无论何时手动调用重置或重新启动,它都会被重置。- 另请参见:
-
getLastValue()
-
executeTask
protected void executeTask(Task<V> task)
描述从类别复制:Service
使用此服务上定义的
executor
执行给定的任务。 如果executor
为空,则使用默认执行程序,它将创建一个新的守护程序线程,执行此任务。此方法仅用于由Service实现调用。
- 重写:
-
executeTask
在Service<V>
- 参数
-
task
- 要执行的非空任务
-
succeeded
protected void succeeded()
对于子类的受保护的便利方法,当服务状态已转换到SUCCEEDED状态时调用。 该方法在服务完全转换到新状态后被调用。 实现注意:覆盖此方法的子类必须调用此超级实现。
-
failed
protected void failed()
对于子类的受保护的便利方法,只要服务状态已经转换到FAILED状态。 该方法在服务完全转换到新状态后被调用。 实现注意:覆盖此方法的子类必须调用此超级实现。
-
reset
public void reset()
重置服务。 只能在其中一个完成状态(即,已成功,失败或已取消)或READY时被调用。 该方法只能在FX应用程序线程上调用。 实现注意:覆盖此方法的子类必须调用此超级实现。
-
-