モジュール javafx.graphics
パッケージ javafx.concurrent

クラスScheduledService<V>

  • 型パラメータ:
    V - ScheduledServiceの計算値
    すべての実装されたインタフェース:
    Worker<V>, EventTarget


    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はbackoffStrategyrestartOnFailureおよび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は通常、ポーリングに関連するユースケースに対して使用されます。 たとえば、更新があるかどうかを確認するためにサーバーを定期的にpingする場合があります。 ScheduledServiceは次のように実装される場合があります。
    
     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実装を呼び出すように注意する必要があります。
    導入されたバージョン:
    JavaFX 8.0
    • プロパティの詳細

      • period

        public final ObjectProperty<Duration> periodProperty
        最後の実行の開始と次の実行の開始の間で許可する最小時間。 実際の期間(cumulativePeriodとも呼ばれる)は、このプロパティとbackoffStrategyおよび失敗数によって異なります。
        関連項目:
        getPeriod(), setPeriod(Duration)
      • maximumFailureCount

        public final IntegerProperty maximumFailureCountProperty
        FAILED状態で終了する前にScheduledServiceが失敗できる最大回数。 ScheduledServiceは手動で再起動でき、そうすると現在の数はリセットされます。
        関連項目:
        getMaximumFailureCount(), setMaximumFailureCount(int)
      • currentFailureCount

        public final ReadOnlyIntegerProperty currentFailureCountProperty
        ScheduledServiceが失敗した現在の回数。 これは、ScheduledServiceが手動で再起動されるたびにリセットされます。
        関連項目:
        getCurrentFailureCount()
      • cumulativePeriod

        public final ReadOnlyObjectProperty<Duration> cumulativePeriodProperty
        反復の間の使用中の現在の累積期間。 これは、失敗後を除くとperiodと同じになり、失敗後はbackoffStrategyの結果が各失敗に続く累積期間として使用されます。 これは、ScheduledServiceが手動で再起動されるか反復が成功するたびにリセットされます。 cumulativePeriodは、ScheduledServiceがスケジュール済状態になると変更されます。 cumulativePeriodは、maximumCumulativePeriodを設定することによって上限を設定できます。
        関連項目:
        getCumulativePeriod()
      • maximumCumulativePeriod

        public final ObjectProperty<Duration> maximumCumulativePeriodProperty
        cumulativePeriodの最大許容値。 この値を設定すると、失敗が繰り返される場合に、バックオフ・アルゴリズムによって累積期間に対して過度に大きい値が生成されるのを防ぐのに役立ちます。 累積期間はこの値よりも大きくならないことが保証されます。 maximumCumulativePeriodが負の場合、cumulativePeriodの上限は0に設定されます。 maximumCumulativePeriodがNaNまたはnullの場合は、cumulativePeriodに影響しません。
        関連項目:
        getMaximumCumulativePeriod(), setMaximumCumulativePeriod(Duration)
      • lastValue

        public final ReadOnlyObjectProperty<V> lastValueProperty
        最後に成功した計算値。 各反復中に、ScheduledServiceのvalueは他のServiceと同様にnullにリセットされます。 それに対し、lastValueは複数の反復にわたる場合でも最新の成功した計算値に設定されます。 ただし、リセットまたは再起動を手動で呼び出すたびにリセットされます。
        関連項目:
        getLastValue()
    • フィールドの詳細

      • EXPONENTIAL_BACKOFF_STRATEGY

        public static final Callback<ScheduledService<?>,Duration> EXPONENTIAL_BACKOFF_STRATEGY
        失敗が発生した場合に再実行間の期間を指数関数的にバックオフする、backoffStrategyプロパティのCallback実装。 この計算では、元の期間と連続した失敗の数を取得し、その情報からバックオフ量を計算します。

        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プロパティのCallback実装。 この計算では、元の期間と連続した失敗の数を取得し、その情報からバックオフ量を計算します。

        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プロパティのCallback実装。 この計算では、元の期間と連続した失敗の数を取得し、その情報からバックオフ量を計算します。

        serviceがnullの場合は、Duration.ZEROが返されます。 期間が0の場合、このメソッドの結果は単純にcurrentFailureCountになります。 それ以外の場合は、戻り値はperiod + (period * currentFailureCount)と同じです。

    • コンストラクタの詳細

      • ScheduledService

        public ScheduledService​()
    • メソッドの詳細

      • getDelay

        public final Duration getDelay​()
        プロパティdelayの値を取得します。
        プロパティの説明:
        ScheduledServiceを最初に起動する時間と操作を開始する時間の間の初期遅延。 これは、Service.start()またはService.restart()の新規の起動に続いて、ScheduledServiceがRUNNING状態になる前にSCHEDULED状態のままである時間です。
      • setDelay

        public final void setDelay​(Duration value)
        プロパティdelayの値を設定します。
        プロパティの説明:
        ScheduledServiceを最初に起動する時間と操作を開始する時間の間の初期遅延。 これは、Service.start()またはService.restart()の新規の起動に続いて、ScheduledServiceがRUNNING状態になる前にSCHEDULED状態のままである時間です。
      • getPeriod

        public final Duration getPeriod​()
        プロパティperiodの値を取得します。
        プロパティの説明:
        最後の実行の開始と次の実行の開始の間で許可する最小時間。 実際の期間(cumulativePeriodとも呼ばれる)は、このプロパティとbackoffStrategyおよび失敗数によって異なります。
      • setPeriod

        public final void setPeriod​(Duration value)
        プロパティperiodの値を設定します。
        プロパティの説明:
        最後の実行の開始と次の実行の開始の間で許可する最小時間。 実際の期間(cumulativePeriodとも呼ばれる)は、このプロパティとbackoffStrategyおよび失敗数によって異なります。
      • periodProperty

        public final ObjectProperty<Duration> periodProperty​()
        最後の実行の開始と次の実行の開始の間で許可する最小時間。 実際の期間(cumulativePeriodとも呼ばれる)は、このプロパティとbackoffStrategyおよび失敗数によって異なります。
        関連項目:
        getPeriod(), setPeriod(Duration)
      • getBackoffStrategy

        public final Callback<ScheduledService<?>,Duration> getBackoffStrategy​()
        プロパティbackoffStrategyの値を取得します。
        プロパティの説明:
        失敗ごとに期間に追加する時間を計算します。 この累積量は、ScheduledServiceが手動で再起動されるたびにリセットされます。
      • setBackoffStrategy

        public final void setBackoffStrategy​(Callback<ScheduledService<?>,Duration> value)
        プロパティbackoffStrategyの値を設定します。
        プロパティの説明:
        失敗ごとに期間に追加する時間を計算します。 この累積量は、ScheduledServiceが手動で再起動されるたびにリセットされます。
      • getRestartOnFailure

        public final boolean getRestartOnFailure​()
        プロパティrestartOnFailureの値を取得します。
        プロパティの説明:
        タスクに失敗した場合にScheduledServiceを自動的に再起動するかどうかを示します。
      • setRestartOnFailure

        public final void setRestartOnFailure​(boolean value)
        プロパティrestartOnFailureの値を設定します。
        プロパティの説明:
        タスクに失敗した場合にScheduledServiceを自動的に再起動するかどうかを示します。
      • getMaximumFailureCount

        public final int getMaximumFailureCount​()
        プロパティmaximumFailureCountの値を取得します。
        プロパティの説明:
        FAILED状態で終了する前にScheduledServiceが失敗できる最大回数。 ScheduledServiceは手動で再起動でき、そうすると現在の数はリセットされます。
      • setMaximumFailureCount

        public final void setMaximumFailureCount​(int value)
        プロパティmaximumFailureCountの値を設定します。
        プロパティの説明:
        FAILED状態で終了する前にScheduledServiceが失敗できる最大回数。 ScheduledServiceは手動で再起動でき、そうすると現在の数はリセットされます。
      • maximumFailureCountProperty

        public final IntegerProperty maximumFailureCountProperty​()
        FAILED状態で終了する前にScheduledServiceが失敗できる最大回数。 ScheduledServiceは手動で再起動でき、そうすると現在の数はリセットされます。
        関連項目:
        getMaximumFailureCount(), setMaximumFailureCount(int)
      • getCurrentFailureCount

        public final int getCurrentFailureCount​()
        プロパティcurrentFailureCountの値を取得します。
        プロパティの説明:
        ScheduledServiceが失敗した現在の回数。 これは、ScheduledServiceが手動で再起動されるたびにリセットされます。
      • currentFailureCountProperty

        public final ReadOnlyIntegerProperty currentFailureCountProperty​()
        ScheduledServiceが失敗した現在の回数。 これは、ScheduledServiceが手動で再起動されるたびにリセットされます。
        関連項目:
        getCurrentFailureCount()
      • getCumulativePeriod

        public final Duration getCumulativePeriod​()
        プロパティcumulativePeriodの値を取得します。
        プロパティの説明:
        反復の間の使用中の現在の累積期間。 これは、失敗後を除くと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​()
        プロパティmaximumCumulativePeriodの値を取得します。
        プロパティの説明:
        cumulativePeriodの最大許容値。 この値を設定すると、失敗が繰り返される場合に、バックオフ・アルゴリズムによって累積期間に対して過度に大きい値が生成されるのを防ぐのに役立ちます。 累積期間はこの値よりも大きくならないことが保証されます。 maximumCumulativePeriodが負の場合、cumulativePeriodの上限は0に設定されます。 maximumCumulativePeriodがNaNまたはnullの場合は、cumulativePeriodに影響しません。
      • setMaximumCumulativePeriod

        public final void setMaximumCumulativePeriod​(Duration value)
        プロパティmaximumCumulativePeriodの値を設定します。
        プロパティの説明:
        cumulativePeriodの最大許容値。 この値を設定すると、失敗が繰り返される場合に、バックオフ・アルゴリズムによって累積期間に対して過度に大きい値が生成されるのを防ぐのに役立ちます。 累積期間はこの値よりも大きくならないことが保証されます。 maximumCumulativePeriodが負の場合、cumulativePeriodの上限は0に設定されます。 maximumCumulativePeriodがNaNまたはnullの場合は、cumulativePeriodに影響しません。
      • maximumCumulativePeriodProperty

        public final ObjectProperty<Duration> maximumCumulativePeriodProperty​()
        cumulativePeriodの最大許容値。 この値を設定すると、失敗が繰り返される場合に、バックオフ・アルゴリズムによって累積期間に対して過度に大きい値が生成されるのを防ぐのに役立ちます。 累積期間はこの値よりも大きくならないことが保証されます。 maximumCumulativePeriodが負の場合、cumulativePeriodの上限は0に設定されます。 maximumCumulativePeriodがNaNまたはnullの場合は、cumulativePeriodに影響しません。
        関連項目:
        getMaximumCumulativePeriod(), setMaximumCumulativePeriod(Duration)
      • getLastValue

        public final V getLastValue​()
        プロパティlastValueの値を取得します。
        プロパティの説明:
        最後に成功した計算値。 各反復中に、ScheduledServiceのvalueは他のServiceと同様にnullにリセットされます。 それに対し、lastValueは複数の反復にわたる場合でも最新の成功した計算値に設定されます。 ただし、リセットまたは再起動を手動で呼び出すたびにリセットされます。
      • lastValueProperty

        public final ReadOnlyObjectProperty<V> lastValueProperty​()
        最後に成功した計算値。 各反復中に、ScheduledServiceのvalueは他のServiceと同様にnullにリセットされます。 それに対し、lastValueは複数の反復にわたる場合でも最新の成功した計算値に設定されます。 ただし、リセットまたは再起動を手動で呼び出すたびにリセットされます。
        関連項目:
        getLastValue()
      • executeTask

        protected void executeTask​(Task<V> task)
        次のクラスからコピーされた説明: Service

        このServiceに対して定義されたexecutorを使用して、指定されたタスクを実行します。 executorがnullの場合、このタスクを実行する新しいデーモン・スレッドを作成するデフォルトの実行者が使用されます。

        このメソッドは、Service実装による呼出しのみが意図されています。

        オーバーライド:
        executeTask 、クラス: Service<V>
        パラメータ:
        task - 実行するnull以外のタスク
      • succeeded

        protected void succeeded​()
        Serviceの状態がSUCCEEDED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。 実装上の注意: このメソッドをオーバーライドするサブクラスは、このスーパー実装を呼び出す必要があります。
        オーバーライド:
        succeeded 、クラス: Service<V>
      • failed

        protected void failed​()
        Serviceの状態がFAILED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。 実装上の注意: このメソッドをオーバーライドするサブクラスは、このスーパー実装を呼び出す必要があります。
        オーバーライド:
        failed 、クラス: Service<V>
      • reset

        public void reset​()
        Serviceをリセットします。 終了状態(SUCCEEDED、FAILEDまたはCANCELLED)のいずれかのとき、またはREADYのときにのみ呼び出すことができます。 このメソッドは、FXアプリケーション・スレッドでのみ呼び出す必要があります。 実装上の注意: このメソッドをオーバーライドするサブクラスは、このスーパー実装を呼び出す必要があります。
        オーバーライド:
        reset 、クラス: Service<V>
      • cancel

        public boolean cancel​()
        現在実行中のタスクを取り消し、追加の反復が発生しないように、このスケジュール済サービスを停止します。
        定義:
        cancel 、インタフェース: Worker<V>
        オーバーライド:
        cancel 、クラス: Service<V>
        戻り値:
        実行中のタスクが取り消されたかどうかであり、タスクが取り消されなかった場合はfalseです。 いずれの場合でも、ScheduledServiceは反復を停止します。