モジュール java.base
パッケージ java.util.concurrent

インタフェースScheduledExecutorService

  • すべてのスーパー・インタフェース:
    Executor, ExecutorService
    既知のすべての実装クラス:
    ScheduledThreadPoolExecutor

    public interface ScheduledExecutorService
    extends ExecutorService
    指定された遅延時間後または定期的にコマンドを実行するようにスケジュールできるExecutorServiceです。

    scheduleメソッドは、さまざまな遅延の設定されたタスクを作成し、実行の取り消しまたはチェックに使用できるタスク・オブジェクトを返します。 scheduleAtFixedRateメソッドおよびscheduleWithFixedDelayメソッドは、取り消されるまで定期的に実行されるタスクを作成および実行します。

    Executor.execute(Runnable)ExecutorServiceの各submitメソッドを使用して送信されたコマンドは、要求された遅延が0としてスケジュールされます。 scheduleメソッドではゼロまたは負の遅延(期間は除く)も許可され、その場合はただちに実行する要求として扱われます。

    すべてのscheduleメソッドは、相対的な遅延および期間を引数として受け入れますが、絶対日時は受け入れません。 Dateとして表される絶対時間を必要な形式に変換するのは簡単です。 たとえば、特定の将来のdateにスケジュール設定するには、schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)を使用できます。 ただしネットワーク時間同期プロトコルやクロックのずれなどの要因があるため、相対的な遅延の有効期限(タスクが有効になる時点)が現在のDateと一致する必要はありません。

    Executorsクラスは、このパッケージで提供されるScheduledExecutorService実装のための便利なファクトリ・メソッドを提供します。

    使用例

    次のクラスには、1時間の間、10秒ごとにビープ音が鳴るようにScheduledExecutorServiceを設定するメソッドがあります。
     
     import static java.util.concurrent.TimeUnit.*;
     class BeeperControl {
       private final ScheduledExecutorService scheduler =
         Executors.newScheduledThreadPool(1);
    
       public void beepForAnHour() {
         Runnable beeper = () -> System.out.println("beep");
         ScheduledFuture<?> beeperHandle =
           scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
         Runnable canceller = () -> beeperHandle.cancel(false);
         scheduler.schedule(canceller, 1, HOURS);
       }
     }
    導入されたバージョン:
    1.5
    • メソッドの詳細

      • schedule

        ScheduledFuture<?> schedule​(Runnable command,
                                    long delay,
                                    TimeUnit unit)
        指定された遅延後に有効になるワン・ショット・タスクを送信します。
        パラメータ:
        command - 実行するタスク
        delay - 現在から遅延実行までの時間
        unit - delayパラメータの時間単位
        戻り値:
        タスクの保留状態の完了を表すScheduledFuture。そのget()メソッドは完了時にnullを返す
        例外:
        RejectedExecutionException - タスクの実行をスケジュールできない場合
        NullPointerException - コマンドまたはユニットがヌルの場合
      • schedule

        <V> ScheduledFuture<V> schedule​(Callable<V> callable,
                                        long delay,
                                        TimeUnit unit)
        指定した遅延の後に有効になる、値を返すワン・ショット・タスクを送信します。
        型パラメータ:
        V - 呼出し可能タスクの結果の型
        パラメータ:
        callable - 実行する関数
        delay - 現在から遅延実行までの時間
        unit - delayパラメータの時間単位
        戻り値:
        結果を抽出または取り消すために使用できるScheduledFuture
        例外:
        RejectedExecutionException - タスクの実行をスケジュールできない場合
        NullPointerException - 呼び出し可能またはユニットがnullの場合
      • scheduleAtFixedRate

        ScheduledFuture<?> scheduleAtFixedRate​(Runnable command,
                                               long initialDelay,
                                               long period,
                                               TimeUnit unit)
        指定された初期遅延の後に最初に有効になり、続いて指定された期間で有効になる定期的なアクションを送信します。つまり、実行はinitialDelayinitialDelay + periodinitialDelay + 2 * periodなどの後に開始されます。

        タスク実行のシーケンスは、次の例外的な完了が発生するまで無期限に続きます:

        • タスクは返された未来を介して「明示的に取消された」です。
        • エグゼキュータが終了し、タスクの取消も発生します。
        • タスクの実行によって例外がスローされます。 この場合、返された未来のgetを呼び出すと例外がその原因としてExecutionExceptionがスローされます。
        その後の実行は抑制されます。 返された将来のisDone()へのその後の呼び出しは、trueを返します。

        このタスクを実行するのに指定の期間(period)より長い時間がかかる場合、以降の実行は遅れて開始されることがありますが、並行して実行はされません。

        パラメータ:
        command - 実行するタスク
        initialDelay - 最初の遅延実行までの時間
        period - 連続する実行の間隔
        unit - initialDelayおよびperiodパラメータの時間単位
        戻り値:
        一連の繰り返しタスクの保留中の完了を表すScheduledFuture。 将来のget()メソッドは決して正常に戻らず、タスクの取消やタスクの実行の異常終了時に例外をスローします。
        例外:
        RejectedExecutionException - タスクの実行をスケジュールできない場合
        NullPointerException - コマンドまたはユニットがヌルの場合
        IllegalArgumentException - periodが0以下である場合
      • scheduleWithFixedDelay

        ScheduledFuture<?> scheduleWithFixedDelay​(Runnable command,
                                                  long initialDelay,
                                                  long delay,
                                                  TimeUnit unit)
        指定された初期遅延の後に最初に有効になる定期的なアクションを送信し、その後、1つの実行の終了と次の実行の開始の間の所定の遅延で送信します。

        タスク実行のシーケンスは、次の例外的な完了が発生するまで無期限に続きます:

        • タスクは返された未来を介して「明示的に取消された」です。
        • エグゼキュータが終了し、タスクの取消も発生します。
        • タスクの実行によって例外がスローされます。 この場合、返された未来のgetを呼び出すと例外がその原因としてExecutionExceptionがスローされます。
        その後の実行は抑制されます。 返された将来のisDone()へのその後の呼び出しは、trueを返します。
        パラメータ:
        command - 実行するタスク
        initialDelay - 最初の遅延実行までの時間
        delay - 実行の終了後から次の開始までの遅延
        unit - initialDelayおよびdelayパラメータの時間単位
        戻り値:
        一連の繰り返しタスクの保留中の完了を表すScheduledFuture。 将来のget()メソッドは決して正常に戻らず、タスクの取消やタスクの実行の異常終了時に例外をスローします。
        例外:
        RejectedExecutionException - タスクの実行をスケジュールできない場合
        NullPointerException - コマンドまたはユニットがヌルの場合
        IllegalArgumentException - delayが0以下である場合