V
- ScheduledServiceの計算値public abstract class ScheduledService<V> extends Service<V>
ScheduledServiceは、実行が成功した後にそれ自体を自動的に再起動し、一部の条件では失敗の場合でも再起動するService
です。新しいScheduledServiceは、通常のServiceと同様にREADY状態で開始されます。start
またはrestart
を呼び出した後、ScheduledServiceはdelay
によって指定された時間、SCHEDULED状態になります。
RUNNINGになると、ScheduledServiceはそのタスクを実行します。正常に完了すると、ScheduledServiceはSUCCEEDED状態に遷移し、次にREADY状態になってSCHEDULED状態に戻ります。ScheduledServiceがこの状態のままである時間は、RUNNINGへの最後の状態遷移と現在時刻の間の時間、およびperiod
によって異なります。つまり、period
は、1つ実行の開始から次の実行の開始までの最小時間を定義します。前の実行がperiod
が終了する前に完了した場合、ScheduledServiceはperiodが終了するまでSCHEDULED状態のままになります。一方、指定されたperiodよりも長い時間が実行にかかった場合は、ScheduledServiceは即時にRUNNINGに戻ります。
RUNNING中に、ScheduledServiceのタスクがエラーをスローするかそれ以外でFAILEDに遷移した場合、ScheduledServiceはbackoffStrategy
、restartOnFailure
およびmaximumFailureCount
の値に応じて再起動するか終了します。
失敗し、restartOnFailure
がfalseの場合、ScheduledServiceはFAILEDに遷移して停止します。失敗したScheduledServiceを再起動するには、再起動を手動で呼び出す必要があります。
失敗し、restartOnFailure
がtrueの場合、ScheduledServiceは自動的に再起動する場合があります。最初に、backoffStrategy
の呼出しの結果が、新しいcumulativePeriod
になります。この方法で、各失敗の後、サービスを再起動の前に長時間待機させることができます。タスクが正常に完了すると、cumulativePeriodはperiod
の値にリセットされます。
ScheduledServiceはstaticなEXPONENTIAL_BACKOFF_STRATEGYおよびLOGARITHMIC_BACKOFF_STRATEGYの実装を定義し、LOGARITHMIC_BACKOFF_STRATEGYがbackoffStrategyのデフォルト値です。maximumFailureCount
に達すると、restartOnFailure
がfalseであった場合と同様に、ScheduledServiceはFAILEDに遷移します。
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));
この例は、リモート・サーバーを1秒ごとにpingします。
このクラスのタイミングの信頼性は、絶対的ではありません。非常にビジーなイベント・スレッドでは、バックグラウンド・タスクの実行の開始でタイミング・ラグが発生する場合があるため、periodまたはdelayの値が非常に小さいと不正確になる可能性があります。数百ミリ秒以上のdelayまたはperiodでは信頼性はかなり高くなります。
デフォルト構成のScheduledServiceでは、デフォルトのperiod
は0、デフォルトのdelay
は0です。これにより、ScheduledServiceはタスクをService.start()
で即時に実行し、正常に完了すると即時に再実行します。
このクラスのこの目的のために、Duration.isUnknown()
に対してtrueを応答するDurationは、その時間をDuration.ZEROであるように処理します。同様に、Duration.isIndefinite()
に対してtrueを応答するDurationは、時間はDouble.MAX_VALUEミリ秒であるように処理されます。nullのDurationは、Duration.ZEROとして処理されます。バックオフ戦略コールバックのカスタム実装は、これらの潜在的な異なる値を処理するように準備されている必要があります。
ScheduledServiceでは、lastValue
という新しいプロパティが導入されています。lastValueは、最後に成功した計算値です。Serviceはそのvalue
プロパティを実行ごとにクリアするため、またScheduledServiceは完了の直後に実行を再スケジュールするため(取消し済状態または失敗状態ではない場合)、valueプロパティはScheduledServiceではあまり有用ではありません。ほとんどの場合、かわりにlastValueによって返される値を使用します。
Service.ready()
、Service.scheduled()
、Service.running()
、succeeded()
、Service.cancelled()
およびfailed()
メソッドが実装されています。これらのメソッドもオーバーライドするサブクラスは、super実装を呼び出すように注意する必要があります。型 | プロパティと説明 |
---|---|
ObjectProperty<Callback<ScheduledService<?>,Duration>> |
backoffStrategy
失敗ごとに期間に追加する時間を計算します。
|
ReadOnlyObjectProperty<Duration> |
cumulativePeriod
反復の間の使用中の現在の累積期間。
|
ReadOnlyIntegerProperty |
currentFailureCount
ScheduledServiceが失敗した現在の回数。
|
ObjectProperty<Duration> |
delay
ScheduledServiceを最初に起動する時間と操作を開始する時間の間の初期遅延。
|
ReadOnlyObjectProperty<V> |
lastValue
最後に成功した計算値。
|
ObjectProperty<Duration> |
maximumCumulativePeriod
cumulativePeriodの最大許容値。
|
IntegerProperty |
maximumFailureCount
FAILED状態で終了する前にScheduledServiceが失敗できる最大回数。
|
ObjectProperty<Duration> |
period
最後の実行の開始と次の実行の開始の間で許可する最小時間。
|
BooleanProperty |
restartOnFailure
タスクに失敗した場合にScheduledServiceを自動的に再起動するかどうかを示します。
|
Worker.State
修飾子と型 | フィールドと説明 |
---|---|
static Callback<ScheduledService<?>,Duration> |
EXPONENTIAL_BACKOFF_STRATEGY
失敗が発生した場合に再実行間の期間を指数関数的にバックオフする、
backoffStrategy プロパティのCallback実装。 |
static Callback<ScheduledService<?>,Duration> |
LINEAR_BACKOFF_STRATEGY
失敗が発生した場合に再実行間の期間を直線的にバックオフする、
backoffStrategy プロパティのCallback実装。 |
static Callback<ScheduledService<?>,Duration> |
LOGARITHMIC_BACKOFF_STRATEGY
失敗が発生した場合に再実行間の期間を対数的にバックオフする、
backoffStrategy プロパティのCallback実装。 |
コンストラクタと説明 |
---|
ScheduledService() |
修飾子と型 | メソッドと説明 |
---|---|
ObjectProperty<Callback<ScheduledService<?>,Duration>> |
backoffStrategyProperty()
失敗ごとに期間に追加する時間を計算します。
|
boolean |
cancel()
現在実行中のタスクを取り消し、追加の反復が発生しないように、このスケジュール済サービスを停止します。
|
ReadOnlyObjectProperty<Duration> |
cumulativePeriodProperty()
反復の間の使用中の現在の累積期間。
|
ReadOnlyIntegerProperty |
currentFailureCountProperty()
ScheduledServiceが失敗した現在の回数。
|
ObjectProperty<Duration> |
delayProperty()
ScheduledServiceを最初に起動する時間と操作を開始する時間の間の初期遅延。
|
protected void |
executeTask(Task<V> task)
このServiceに対して定義された
executor を使用して、指定されたタスクを実行します。 |
protected void |
failed()
Serviceの状態がFAILED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
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()
FAILED状態で終了する前にScheduledServiceが失敗できる最大回数。
|
ObjectProperty<Duration> |
periodProperty()
最後の実行の開始と次の実行の開始の間で許可する最小時間。
|
void |
reset()
Serviceをリセットします。
|
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()
Serviceの状態がSUCCEEDED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
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
public final ObjectProperty<Duration> delayProperty
Service.start()
またはService.restart()
の新規の起動に続いて、ScheduledServiceがRUNNING状態になる前にSCHEDULED状態のままである時間です。getDelay()
, setDelay(Duration)
public final ObjectProperty<Duration> periodProperty
cumulativePeriod
とも呼ばれる)は、このプロパティとbackoffStrategy
および失敗数によって異なります。getPeriod()
, setPeriod(Duration)
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty
public final BooleanProperty restartOnFailureProperty
public final IntegerProperty maximumFailureCountProperty
public final ReadOnlyIntegerProperty currentFailureCountProperty
getCurrentFailureCount()
public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty
period
と同じになり、失敗後はbackoffStrategyの結果が各失敗に続く累積期間として使用されます。これは、ScheduledServiceが手動で再起動されるか反復が成功するたびにリセットされます。cumulativePeriodは、ScheduledServiceがスケジュール済状態になると変更されます。cumulativePeriodは、maximumCumulativePeriod
を設定することによって上限を設定できます。getCumulativePeriod()
public final ObjectProperty<Duration> maximumCumulativePeriodProperty
public final ReadOnlyObjectProperty<V> lastValueProperty
getLastValue()
public static final Callback<ScheduledService<?>,Duration> EXPONENTIAL_BACKOFF_STRATEGY
backoffStrategy
プロパティのCallback実装。この計算では、元の期間と連続した失敗の数を取得し、その情報からバックオフ量を計算します。
service
がnullの場合は、Duration.ZEROが返されます。期間が0の場合、このメソッドの結果は単純にMath.exp(currentFailureCount)
になります。それ以外のすべての場合では、返される値は{@code period + (period * Math.exp(currentFailureCount)))と同じです。
public static final Callback<ScheduledService<?>,Duration> LOGARITHMIC_BACKOFF_STRATEGY
backoffStrategy
プロパティのCallback実装。この計算では、元の期間と連続した失敗の数を取得し、その情報からバックオフ量を計算します。
service
がnullの場合は、Duration.ZEROが返されます。期間が0の場合、このメソッドの結果は単純にMath.log1p(currentFailureCount)
になります。それ以外のすべての場合では、返される値は{@code period + (period * Math.log1p(currentFailureCount)))と同じです。
public static final Callback<ScheduledService<?>,Duration> LINEAR_BACKOFF_STRATEGY
backoffStrategy
プロパティのCallback実装。この計算では、元の期間と連続した失敗の数を取得し、その情報からバックオフ量を計算します。
service
がnullの場合は、Duration.ZEROが返されます。期間が0の場合、このメソッドの結果は単純にcurrentFailureCount
になります。それ以外のすべての場合では、返される値は{@code period + (period * currentFailureCount)と同じです。
public final Duration getDelay()
Service.start()
またはService.restart()
の新規の起動に続いて、ScheduledServiceがRUNNING状態になる前にSCHEDULED状態のままである時間です。public final void setDelay(Duration value)
Service.start()
またはService.restart()
の新規の起動に続いて、ScheduledServiceがRUNNING状態になる前にSCHEDULED状態のままである時間です。public final ObjectProperty<Duration> delayProperty()
Service.start()
またはService.restart()
の新規の起動に続いて、ScheduledServiceがRUNNING状態になる前にSCHEDULED状態のままである時間です。getDelay()
, setDelay(Duration)
public final Duration getPeriod()
cumulativePeriod
とも呼ばれる)は、このプロパティとbackoffStrategy
および失敗数によって異なります。public final void setPeriod(Duration value)
cumulativePeriod
とも呼ばれる)は、このプロパティとbackoffStrategy
および失敗数によって異なります。public final ObjectProperty<Duration> periodProperty()
cumulativePeriod
とも呼ばれる)は、このプロパティとbackoffStrategy
および失敗数によって異なります。getPeriod()
, setPeriod(Duration)
public final Callback<ScheduledService<?>,Duration> getBackoffStrategy()
public final void setBackoffStrategy(Callback<ScheduledService<?>,Duration> value)
public final ObjectProperty<Callback<ScheduledService<?>,Duration>> backoffStrategyProperty()
public final boolean getRestartOnFailure()
public final void setRestartOnFailure(boolean value)
public final BooleanProperty restartOnFailureProperty()
public final int getMaximumFailureCount()
public final void setMaximumFailureCount(int value)
public final IntegerProperty maximumFailureCountProperty()
public final int getCurrentFailureCount()
public final ReadOnlyIntegerProperty currentFailureCountProperty()
getCurrentFailureCount()
public final Duration getCumulativePeriod()
period
と同じになり、失敗後はbackoffStrategyの結果が各失敗に続く累積期間として使用されます。これは、ScheduledServiceが手動で再起動されるか反復が成功するたびにリセットされます。cumulativePeriodは、ScheduledServiceがスケジュール済状態になると変更されます。cumulativePeriodは、maximumCumulativePeriod
を設定することによって上限を設定できます。public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty()
period
と同じになり、失敗後はbackoffStrategyの結果が各失敗に続く累積期間として使用されます。これは、ScheduledServiceが手動で再起動されるか反復が成功するたびにリセットされます。cumulativePeriodは、ScheduledServiceがスケジュール済状態になると変更されます。cumulativePeriodは、maximumCumulativePeriod
を設定することによって上限を設定できます。getCumulativePeriod()
public final Duration getMaximumCumulativePeriod()
public final void setMaximumCumulativePeriod(Duration value)
public final ObjectProperty<Duration> maximumCumulativePeriodProperty()
public final V getLastValue()
public final ReadOnlyObjectProperty<V> lastValueProperty()
getLastValue()
protected void executeTask(Task<V> task)
Service
このServiceに対して定義されたexecutor
を使用して、指定されたタスクを実行します。executor
がnullの場合、このタスクを実行する新しいデーモン・スレッドを作成するデフォルトの実行者が使用されます。
このメソッドは、Service実装による呼出しのみが意図されています。
executeTask
、クラス: Service<V>
task
- 実行するnull以外のタスクprotected void succeeded()
Service
protected void failed()
Service
public void reset()
Service
Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.