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

クラスScheduledThreadPoolExecutor

すべての実装されたインタフェース:
Executor, ExecutorService, ScheduledExecutorService

public class ScheduledThreadPoolExecutor
extends ThreadPoolExecutor
implements ScheduledExecutorService
指定された遅延時間後または定期的にコマンドを実行するようにスケジュールできるThreadPoolExecutorです。 複数のワーカー・スレッドが必要な場合、またはこのクラスが拡張するThreadPoolExecutorにさらに柔軟性または機能が必要な場合は、Timerよりもこのクラスを使用することをお薦めします。

遅延タスクは有効になるとすぐに実行されますが、有効になったあといつ開始されるかについては、リアルタイム保証がありません。 まったく同じ実行時間にスケジュール設定されたタスクは、送信の先入れ先出し(FIFO)順に有効になります。

送信されたタスクが、実行される前に取り消された場合は、実行が抑制されます。 デフォルトでは、このような取り消されたタスクは、その遅延時間が経過するまでワーク・キューから自動的には削除されません。 これにより、さらに検査や監視を行うことが可能になりますが、取り消されたタスクが無制限に保持される可能性もあります。 これを避けるには、setRemoveOnCancelPolicy(boolean)を使用して、取消時に作業キューからタスクを即時に削除する必要があります。

scheduleAtFixedRateまたはscheduleWithFixedDelayを介してスケジュールされた定期タスクの連続実行は重複しません。 各実行は異なるスレッドによって実行される可能性がありますが、以前の実行の効果は以降の実行の効果の前に発生します。

このクラスはThreadPoolExecutorから継承されますが、継承されたチューニング・メソッドのいくつかはこのクラスにとって有効ではありません。 特に、これはcorePoolSizeスレッドとアンバウンド形式のキューを使用した固定サイズのプールとして機能するため、maximumPoolSizeを調整しても効果はありません。 さらに、corePoolSizeを0に設定したり、allowCoreThreadTimeOutを使用したりしても、プールに実行可能になったタスクを処理するためのスレッドがない状態のままになる可能性があるため、ほとんど効果はありません。

ThreadPoolExecutorと同様に、特に指定がない場合、このクラスはExecutors.defaultThreadFactory()をデフォルトのスレッド・ファクトリとして使用し、ThreadPoolExecutor.AbortPolicyをデフォルトの拒否された実行ハンドラとして使用します。

拡張のノート: このクラスはexecuteメソッドとsubmitメソッドをオーバーライドして、タスク単位の遅延とスケジューリングを制御するための内部ScheduledFutureオブジェクトを生成します。 機能を保護するために、サブクラスでこれらのメソッドをこれ以上オーバーライドする場合は、スーパークラス・バージョンを呼び出す必要があります。これにより、タスクの追加のカスタマイズが実質的に無効になります。 ただし、このクラスでは、代替のprotected拡張メソッドdecorateTask (RunnableCallableごとに1つのバージョン)を提供します。これは、executesubmitschedulescheduleAtFixedRate、およびscheduleWithFixedDelayで入力されたコマンドを実行するために使用される具象タスク型のカスタマイズに使用できます。 デフォルトでは、ScheduledThreadPoolExecutorFutureTaskを拡張するタスク型を使用します。 ただし次のような形式のサブクラスを使用して、変更または置換できます。

 
 public class CustomScheduledExecutor extends ScheduledThreadPoolExecutor {

   static class CustomTask<V> implements RunnableScheduledFuture<V> { ... }

   protected <V> RunnableScheduledFuture<V> decorateTask(
                Runnable r, RunnableScheduledFuture<V> task) {
       return new CustomTask<V>(r, task);
   }

   protected <V> RunnableScheduledFuture<V> decorateTask(
                Callable<V> c, RunnableScheduledFuture<V> task) {
       return new CustomTask<V>(c, task);
   }
   // ... add constructors, etc.
 }

導入されたバージョン:
1.5
  • コンストラクタの詳細

    • ScheduledThreadPoolExecutor

      public ScheduledThreadPoolExecutor​(int corePoolSize)
      指定されたコア・プール・サイズで、新しいScheduledThreadPoolExecutorを作成します。
      パラメータ:
      corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数
      例外:
      IllegalArgumentException - corePoolSize < 0の場合
    • ScheduledThreadPoolExecutor

      public ScheduledThreadPoolExecutor​(int corePoolSize, ThreadFactory threadFactory)
      指定された初期パラメータを使って、新しいScheduledThreadPoolExecutorを作成します。
      パラメータ:
      corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数
      threadFactory - executorが新しいスレッドを作成するときに使用するファクトリ
      例外:
      IllegalArgumentException - corePoolSize < 0の場合
      NullPointerException - threadFactoryがnullである場合
    • ScheduledThreadPoolExecutor

      public ScheduledThreadPoolExecutor​(int corePoolSize, RejectedExecutionHandler handler)
      指定された初期パラメータを使って、新しいScheduledThreadPoolExecutorを作成します。
      パラメータ:
      corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数
      handler - スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラ
      例外:
      IllegalArgumentException - corePoolSize < 0の場合
      NullPointerException - handlerがnullである場合
    • ScheduledThreadPoolExecutor

      public ScheduledThreadPoolExecutor​(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)
      指定された初期パラメータを使って、新しいScheduledThreadPoolExecutorを作成します。
      パラメータ:
      corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数
      threadFactory - executorが新しいスレッドを作成するときに使用するファクトリ
      handler - スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラ
      例外:
      IllegalArgumentException - corePoolSize < 0の場合
      NullPointerException - threadFactoryまたはhandlerがnullの場合
  • メソッドの詳細

    • decorateTask

      protected <V> RunnableScheduledFuture<V> decorateTask​(Runnable runnable, RunnableScheduledFuture<V> task)
      runnableを実行するために使用するタスクを変更または置換します。 このメソッドは、内部タスクを管理するための具象クラスをオーバーライドするために使用できます。 デフォルトの実装は単に指定されたタスクを返します。
      型パラメータ:
      V - タスクの結果の型
      パラメータ:
      runnable - 送信されたRunnable
      task - Runnableを実行するために作成されたタスク
      戻り値:
      runnableを実行できるタスク
      導入されたバージョン:
      1.6
    • decorateTask

      protected <V> RunnableScheduledFuture<V> decorateTask​(Callable<V> callable, RunnableScheduledFuture<V> task)
      呼出し可能レイアウトを実行するために使用するタスクを変更または置換します。 このメソッドは、内部タスクを管理するための具象クラスをオーバーライドするために使用できます。 デフォルトの実装は単に指定されたタスクを返します。
      型パラメータ:
      V - タスクの結果の型
      パラメータ:
      callable - 送信されたCallable
      task - Callableを実行するために作成されたタスク
      戻り値:
      呼出し可能レイアウトを実行できるタスク
      導入されたバージョン:
      1.6
    • schedule

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

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

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

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

      その後の実行は抑制されます。 返された将来のisDone()へのその後の呼び出しは、trueを返します。

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

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

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

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

      その後の実行は抑制されます。 返された将来のisDone()へのその後の呼び出しは、trueを返します。

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

      public void execute​(Runnable command)
      要求された遅延がゼロで、commandを実行します。 これにはschedule(command, 0, anyUnit)と同等の効果があります。 キューの検査やshutdownNowによって返されたリストの検査では、command自体ではなく、遅延が0のScheduledFutureにアクセスすることに注意してください。

      ScheduledFutureオブジェクトを使用した結果として、commandが突然終了した場合でも、2番目のThrowable引数をnullにしてafterExecuteが常に呼び出されます。 代わりに、このようなタスクによってスローされたThrowableは、Future.get()を使用して取得できます。

      定義:
      execute、インタフェース: Executor
      オーバーライド:
      execute、クラス: ThreadPoolExecutor
      パラメータ:
      command - 実行するタスク
      例外:
      RejectedExecutionException - RejectedExecutionHandlerの判断で、executorがシャットダウンされたため、タスクを実行のために受け入れることができない場合
      NullPointerException - commandがnullである場合
    • submit

      public Future<?> submit​(Runnable task)
      インタフェースからコピーされた説明: ExecutorService
      実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 Futureのgetメソッドは、正常に完了した時点でnullを返します。
      定義:
      submit、インタフェース: ExecutorService
      オーバーライド:
      submit、クラス: AbstractExecutorService
      パラメータ:
      task - 送信するタスク
      戻り値:
      タスクの保留完了を表すFuture
      例外:
      RejectedExecutionException - タスクの実行をスケジュールできない場合
      NullPointerException - タスクがnullの場合
    • submit

      public <T> Future<T> submit​(Runnable task, T result)
      インタフェースからコピーされた説明: ExecutorService
      実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 Futureのgetメソッドは、正常に完了した時点で指定された結果を返します。
      定義:
      submit、インタフェース: ExecutorService
      オーバーライド:
      submit、クラス: AbstractExecutorService
      型パラメータ:
      T - 結果の型
      パラメータ:
      task - 送信するタスク
      result - 返す結果
      戻り値:
      タスクの保留完了を表すFuture
      例外:
      RejectedExecutionException - タスクの実行をスケジュールできない場合
      NullPointerException - タスクがnullの場合
    • submit

      public <T> Future<T> submit​(Callable<T> task)
      インタフェースからコピーされた説明: ExecutorService
      値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。 Futureのgetメソッドは、正常に完了した時点でタスクの結果を返します。

      タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get();の形式の構築を使用できます。

      ノート: Executorsクラスには、クロージャに似たほかの一般オブジェクトを変換できるメソッド・セットが含まれます。たとえば、PrivilegedActionCallable形式に変換して、送信可能にすることができます。

      定義:
      submit、インタフェース: ExecutorService
      オーバーライド:
      submit、クラス: AbstractExecutorService
      型パラメータ:
      T - タスクの結果の型
      パラメータ:
      task - 送信するタスク
      戻り値:
      タスクの保留完了を表すFuture
      例外:
      RejectedExecutionException - タスクの実行をスケジュールできない場合
      NullPointerException - タスクがnullの場合
    • setContinueExistingPeriodicTasksAfterShutdownPolicy

      public void setContinueExistingPeriodicTasksAfterShutdownPolicy​(boolean value)
      既存の定期的なタスクの実行を継続するかどうかに関するポリシーを設定します。このexecutorでshutdownが実行されたときでも設定します。 この場合、すでにシャットダウンされている場合、shutdownNowまたはポリシーがfalseに設定されるまで、実行は継続されます。 この値はデフォルトでfalseです。
      パラメータ:
      value - trueの場合はシャットダウン後に続行し、それ以外の場合は続行しない
      関連項目:
      getContinueExistingPeriodicTasksAfterShutdownPolicy()
    • getContinueExistingPeriodicTasksAfterShutdownPolicy

      public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
      既存の定期的なタスクの実行を継続するかどうかに関するポリシーを取得します。このexecutorでshutdownが実行されたときでも取得します。 この場合、すでにシャットダウンされている場合、shutdownNowまたはポリシーがfalseに設定されるまで、実行は継続されます。 この値はデフォルトでfalseです。
      戻り値:
      シャットダウン後に続行する場合はtrue
      関連項目:
      setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)
    • setExecuteExistingDelayedTasksAfterShutdownPolicy

      public void setExecuteExistingDelayedTasksAfterShutdownPolicy​(boolean value)
      既存の遅延タスクを実行するかどうかに関するポリシーを設定します。このexecutorでshutdownが実行されたときでも取得します。 この場合、これらのタスクが終了するのは、shutdownNowの実行時か、すでにシャットダウンが実行されポリシーをfalseに設定したあとに限られます。 この値はデフォルトでtrueです。
      パラメータ:
      value - trueの場合はシャットダウン後に実行し、それ以外の場合は実行しない
      関連項目:
      getExecuteExistingDelayedTasksAfterShutdownPolicy()
    • getExecuteExistingDelayedTasksAfterShutdownPolicy

      public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
      既存の遅延タスクを実行するかどうかに関するポリシーを取得します。このexecutorでshutdownが実行されたときでも取得します。 この場合、これらのタスクが終了するのは、shutdownNowの実行時か、すでにシャットダウンが実行されポリシーをfalseに設定したあとに限られます。 この値はデフォルトでtrueです。
      戻り値:
      シャットダウン後に実行する場合はtrue
      関連項目:
      setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)
    • setRemoveOnCancelPolicy

      public void setRemoveOnCancelPolicy​(boolean value)
      取り消されたタスクを取消し時にワーク・キューからすぐに削除するかどうかに関するポリシーを設定します。 この値はデフォルトでfalseです。
      パラメータ:
      value - trueの場合は取消し時に削除し、それ以外の場合は削除しない。
      導入されたバージョン:
      1.7
      関連項目:
      getRemoveOnCancelPolicy()
    • getRemoveOnCancelPolicy

      public boolean getRemoveOnCancelPolicy()
      取り消されたタスクを取消し時にワーク・キューからすぐに削除するかどうかに関するポリシーを取得します。 この値はデフォルトでfalseです。
      戻り値:
      取り消されたタスクがただちにキューから削除される場合はtrue
      導入されたバージョン:
      1.7
      関連項目:
      setRemoveOnCancelPolicy(boolean)
    • shutdown

      public void shutdown()
      順序正しくシャットダウンを開始します。以前に送信されたタスクが実行されますが、新規タスクは受け入れられません。 シャットダウン後に呼出しを実行しても、効果はありません。

      このメソッドは、以前に送信されたタスクが実行を完了するのを待機しません。 これを実行するには、awaitTerminationを使ってください。

      ExecuteExistingDelayedTasksAfterShutdownPolicyfalseに設定されていた場合、遅延時間が経過していない既存の遅延タスクは取り消されます。 また、 ContinueExistingPeriodicTasksAfterShutdownPolicytrueに設定されていないかぎり、既存の定期的なタスクの以後の実行は取り消されます。

      定義:
      shutdown、インタフェース: ExecutorService
      オーバーライド:
      shutdown、クラス: ThreadPoolExecutor
      例外:
      SecurityException - セキュリティ・マネージャが存在する状況でこのExecutorServiceのシャットダウンを実行すると、呼出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission("modifyThread")を保持しないか、セキュリティ・マネージャのcheckAccessメソッドがアクセスを拒否するためである。
    • shutdownNow

      public List<Runnable> shutdownNow()
      実行中のアクティブなタスクすべての停止を試み、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返します。 これらのタスクは、このメソッドから戻るときに、タスク・キューからドレイン(削除)されます。

      このメソッドは、アクティブに実行中のタスクが終了するのを待機しません。 これを実行するには、awaitTerminationを使ってください。

      実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。 この実装は、Thread.interrupt()を介してタスクを中断します。割り込みに応答しないタスクは決して終了しない可能性があります。

      定義:
      shutdownNow、インタフェース: ExecutorService
      オーバーライド:
      shutdownNow、クラス: ThreadPoolExecutor
      戻り値:
      実行が開始されなかったタスクのリスト。 このリストの各要素はScheduledFutureです。 scheduleメソッドの1つを介してサブミットされたタスクの場合、要素は返されたScheduledFutureと同じになります。 executeを使用して送信されたタスクの場合、要素はゼロ遅延ScheduledFutureになります。
      例外:
      SecurityException - セキュリティ・マネージャが存在する状況でこのExecutorServiceのシャットダウンを実行すると、呼出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission("modifyThread")を保持しないか、セキュリティ・マネージャのcheckAccessメソッドがアクセスを拒否するためである。
    • getQueue

      public BlockingQueue<Runnable> getQueue()
      このexecutorで使用するタスク・キューを返します。 タスク・キューへのアクセスは、デバッグおよび監視を主な目的としています。 このキューは、アクティブに使用されている可能性があります。 タスク・キューを取り出しても、キューに入っているタスクの実行は妨げられません。

      このキューの各要素はScheduledFutureです。 scheduleメソッドの1つを介してサブミットされたタスクの場合、要素は返されたScheduledFutureと同じになります。 executeを使用して送信されたタスクの場合、要素はゼロ遅延ScheduledFutureになります。

      このキューに対する反復処理では、タスクが実行順序でトラバースされることは保証されません

      オーバーライド:
      getQueue、クラス: ThreadPoolExecutor
      戻り値:
      タスク・キュー