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

クラスScheduledThreadPoolExecutor

java.lang.Object
すべての実装されたインタフェース:
AutoCloseable, 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