public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService
ThreadPoolExecutorです。 複数のワーカー・スレッドが必要な場合、またはこのクラスが拡張するThreadPoolExecutorにさらに柔軟性または機能が必要な場合は、Timerよりもこのクラスを使用することをお薦めします。
遅延タスクは有効になるとすぐに実行されますが、有効になったあといつ開始されるかについては、リアルタイム保証がありません。 まったく同じ実行時間にスケジュール設定されたタスクは、送信の先入れ先出し(FIFO)順に有効になります。
送信されたタスクが、実行される前に取り消された場合は、実行が抑制されます。 デフォルトでは、このような取り消されたタスクは、その遅延時間が経過するまでワーク・キューから自動的には削除されません。 これにより、さらに検査や監視を行うことが可能になりますが、取り消されたタスクが無制限に保持される可能性もあります。 これを回避するには、setRemoveOnCancelPolicy(boolean)をtrueに設定します。これにより、タスクが取消し時にただちにワーク・キューから削除されます。
scheduleAtFixedRateまたはscheduleWithFixedDelayを使用してスケジュールされたタスクを連続的に実行しても、オーバーラップは発生しません。 各実行は異なるスレッドによって実行される可能性がありますが、以前の実行の効果は以降の実行の効果の前に発生します。
このクラスはThreadPoolExecutorから継承されますが、継承されたチューニング・メソッドのいくつかはこのクラスにとって有効ではありません。 特に、これはcorePoolSizeスレッドとアンバウンド形式のキューを使用した固定サイズのプールとして機能するため、maximumPoolSizeを調整しても効果はありません。 さらに、corePoolSizeを0に設定したり、allowCoreThreadTimeOutを使用したりしても、プールに実行可能になったタスクを処理するためのスレッドがない状態のままになる可能性があるため、ほとんど効果はありません。
拡張のノート: このクラスはexecuteメソッドとsubmitメソッドをオーバーライドして、タスク単位の遅延とスケジューリングを制御するための内部ScheduledFutureオブジェクトを生成します。 機能を保護するために、サブクラスでこれらのメソッドをこれ以上オーバーライドする場合は、スーパークラス・バージョンを呼び出す必要があります。これにより、タスクの追加のカスタマイズが実質的に無効になります。 ただし、このクラスでは、代替のprotected拡張メソッドdecorateTask (RunnableとCallableごとに1つのバージョン)を提供します。これは、execute、submit、schedule、scheduleAtFixedRate、およびscheduleWithFixedDelayで入力されたコマンドを実行するために使用される具象タスク型のカスタマイズに使用できます。 デフォルトでは、ScheduledThreadPoolExecutorはFutureTaskを拡張するタスク型を使用します。 ただし次のような形式のサブクラスを使用して、変更または置換できます。
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.
}ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.CallerRunsPolicy, ThreadPoolExecutor.DiscardOldestPolicy, ThreadPoolExecutor.DiscardPolicy| コンストラクタ | 説明 |
|---|---|
ScheduledThreadPoolExecutor(int corePoolSize) |
指定されたコア・プール・サイズで、新しい
ScheduledThreadPoolExecutorを作成します。 |
ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler) |
指定された初期パラメータを使って、新しいScheduledThreadPoolExecutorを作成します。
|
ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory) |
指定された初期パラメータを使って、新しい
ScheduledThreadPoolExecutorを作成します。 |
ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler) |
指定された初期パラメータを使って、新しいScheduledThreadPoolExecutorを作成します。
|
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
protected <V> RunnableScheduledFuture<V> |
decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) |
呼出し可能レイアウトを実行するために使用するタスクを変更または置換します。
|
protected <V> RunnableScheduledFuture<V> |
decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) |
runnableを実行するために使用するタスクを変更または置換します。
|
void |
execute(Runnable command) |
要求された遅延がゼロで、
commandを実行します。 |
boolean |
getContinueExistingPeriodicTasksAfterShutdownPolicy() |
既存の定期的なタスクの実行を継続するかどうかに関するポリシーを取得します。このexecutorで
shutdownが実行されたときでも取得します。 |
boolean |
getExecuteExistingDelayedTasksAfterShutdownPolicy() |
既存の遅延タスクを実行するかどうかに関するポリシーを取得します。このexecutorで
shutdownが実行されたときでも取得します。 |
BlockingQueue<Runnable> |
getQueue() |
このexecutorで使用するタスク・キューを返します。
|
boolean |
getRemoveOnCancelPolicy() |
取り消されたタスクを取消し時にワーク・キューからすぐに削除するかどうかに関するポリシーを取得します。
|
<V> ScheduledFuture<V> |
schedule(Callable<V> callable, long delay, TimeUnit unit) |
指定された遅延後に有効になるScheduledFutureを作成して実行します。
|
ScheduledFuture<?> |
schedule(Runnable command, long delay, TimeUnit unit) |
指定された遅延後に有効になる単発的なアクションを作成して実行します。
|
ScheduledFuture<?> |
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) |
指定された初期遅延の経過後にはじめて有効になり、その後は指定された期間ごとに有効になる定期的なアクションを作成して実行します。つまり実行は
initialDelay後に開始され、その後はinitialDelay+period、initialDelay+2 * periodというようになります。 |
ScheduledFuture<?> |
scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) |
指定された初期遅延の経過後にはじめて有効になり、その後は実行の終了後から次の開始までの指定の遅延ごとに有効になる定期的なアクションを作成して実行します。
|
void |
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value) |
既存の定期的なタスクの実行を継続するかどうかに関するポリシーを設定します。このexecutorで
shutdownが実行されたときでも設定します。 |
void |
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value) |
既存の遅延タスクを実行するかどうかに関するポリシーを設定します。このexecutorで
shutdownが実行されたときでも取得します。 |
void |
setRemoveOnCancelPolicy(boolean value) |
取り消されたタスクを取消し時にワーク・キューからすぐに削除するかどうかに関するポリシーを設定します。
|
void |
shutdown() |
順序正しくシャットダウンを開始します。以前に送信されたタスクが実行されますが、新規タスクは受け入れられません。
|
List<Runnable> |
shutdownNow() |
実行中のアクティブなタスクすべての停止を試み、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返します。
|
<T> Future<T> |
submit(Callable<T> task) |
値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。
|
Future<?> |
submit(Runnable task) |
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。
|
<T> Future<T> |
submit(Runnable task, T result) |
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。
|
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, remove, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, terminated, toStringinvokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskForclone, equals, getClass, hashCode, notify, notifyAll, wait, wait, waitawaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminatedpublic ScheduledThreadPoolExecutor(int corePoolSize)
ScheduledThreadPoolExecutorを作成します。corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数IllegalArgumentException - corePoolSize < 0の場合public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory)
ScheduledThreadPoolExecutorを作成します。corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数threadFactory - executorが新しいスレッドを作成するときに使用するファクトリIllegalArgumentException - corePoolSize < 0の場合NullPointerException - threadFactoryがnullである場合public ScheduledThreadPoolExecutor(int corePoolSize,
RejectedExecutionHandler handler)
corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数handler - スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラIllegalArgumentException - corePoolSize < 0の場合NullPointerException - handlerがnullである場合public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize - allowCoreThreadTimeOutが設定されていないかぎり、アイドルであってもプール内に維持されるスレッドの数threadFactory - executorが新しいスレッドを作成するときに使用するファクトリhandler - スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラIllegalArgumentException - corePoolSize < 0の場合NullPointerException - threadFactoryまたはhandlerがnullの場合protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)
V - タスクの結果の型runnable - 送信されたRunnabletask - Runnableを実行するために作成されたタスクprotected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)
V - タスクの結果の型callable - 送信されたCallabletask - Callableを実行するために作成されたタスクpublic ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
ScheduledExecutorServiceschedule、インタフェースScheduledExecutorServicecommand - 実行するタスクdelay - 現在から遅延実行までの時間unit - delayパラメータの時間単位get()メソッドは完了時にnullを返すRejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - コマンドがnullの場合public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorServiceschedule、インタフェースScheduledExecutorServiceV - 呼出し可能タスクの結果の型callable - 実行する関数delay - 現在から遅延実行までの時間unit - delayパラメータの時間単位RejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - 呼出し可能レイアウトがnullの場合public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
ScheduledExecutorServiceinitialDelay後に開始され、その後はinitialDelay+period、initialDelay+2 * periodというようになります。 タスクを実行して例外が発生すると、以降の実行は抑止されます。 そうでない場合は、executorの取り消しまたは終了によってのみタスクは終了します。 このタスクを実行するのに指定の期間(period)より長い時間がかかる場合、以降の実行は遅れて開始されることがありますが、並行して実行はされません。 scheduleAtFixedRate、インタフェースScheduledExecutorServicecommand - 実行するタスクinitialDelay - 最初の遅延実行までの時間period - 連続する実行の間隔unit - initialDelayおよびperiodパラメータの時間単位get()メソッドは取消し時に例外をスローするRejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - コマンドがnullの場合IllegalArgumentException - periodが0以下である場合public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
ScheduledExecutorServicescheduleWithFixedDelay、インタフェースScheduledExecutorServicecommand - 実行するタスクinitialDelay - 最初の遅延実行までの時間delay - 実行の終了後から次の開始までの遅延unit - initialDelayおよびdelayパラメータの時間単位get()メソッドは取消し時に例外をスローするRejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - コマンドがnullの場合IllegalArgumentException - delayが0以下である場合public void execute(Runnable command)
commandを実行します。 これにはschedule(command, 0, anyUnit)と同等の効果があります。 キューの検査やshutdownNowによって返されたリストの検査では、command自体ではなく、遅延が0のScheduledFutureにアクセスすることに注意してください。
ScheduledFutureオブジェクトを使用した結果として、commandが突然終了した場合でも、2番目のThrowable引数をnullにしてafterExecuteが常に呼び出されます。 代わりに、このようなタスクによってスローされたThrowableは、Future.get()を使用して取得できます。
execute、インタフェースExecutorexecute、クラスThreadPoolExecutorcommand - 実行するタスクRejectedExecutionException - RejectedExecutionHandlerの判断で、executorがシャットダウンされたため、タスクを実行のために受け入れることができない場合NullPointerException - commandがnullである場合public Future<?> submit(Runnable task)
ExecutorServicegetメソッドは、正常に完了した時点でnullを返します。 submit、インタフェースExecutorServicesubmit、クラスAbstractExecutorServicetask - 送信するタスクRejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - タスクがnullの場合public <T> Future<T> submit(Runnable task, T result)
ExecutorServicegetメソッドは、正常に完了した時点で指定された結果を返します。 submit、インタフェースExecutorServicesubmit、クラスAbstractExecutorServiceT - 結果の型task - 送信するタスクresult - 返す結果RejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - タスクがnullの場合public <T> Future<T> submit(Callable<T> task)
ExecutorServicegetメソッドは、正常に完了した時点でタスクの結果を返します。
タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get();の形式の構築を使用できます。
ノート: Executorsクラスには、クロージャに似たほかの一般オブジェクトを変換できるメソッド・セットが含まれます。たとえば、PrivilegedActionをCallable形式に変換して、送信可能にすることができます。
submit、インタフェースExecutorServicesubmit、クラスAbstractExecutorServiceT - タスクの結果の型task - 送信するタスクRejectedExecutionException - タスクの実行をスケジュールできない場合NullPointerException - タスクがnullの場合public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
shutdownが実行されたときでも設定します。 この場合、これらのタスクが終了するのは、shutdownNowの実行時か、すでにシャットダウンが実行されポリシーをfalseに設定したあとに限られます。 この値はデフォルトでfalseです。 value - trueの場合はシャットダウン後に続行し、それ以外の場合は続行しないgetContinueExistingPeriodicTasksAfterShutdownPolicy()public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
shutdownが実行されたときでも取得します。 この場合、これらのタスクが終了するのは、shutdownNowの実行時か、すでにシャットダウンが実行されポリシーをfalseに設定したあとに限られます。 この値はデフォルトでfalseです。 truesetContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
shutdownが実行されたときでも取得します。 この場合、これらのタスクが終了するのは、shutdownNowの実行時か、すでにシャットダウンが実行されポリシーをfalseに設定したあとに限られます。 この値はデフォルトでtrueです。 value - trueの場合はシャットダウン後に実行し、それ以外の場合は実行しないgetExecuteExistingDelayedTasksAfterShutdownPolicy()public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
shutdownが実行されたときでも取得します。 この場合、これらのタスクが終了するのは、shutdownNowの実行時か、すでにシャットダウンが実行されポリシーをfalseに設定したあとに限られます。 この値はデフォルトでtrueです。 truesetExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)public void setRemoveOnCancelPolicy(boolean value)
falseです。 value - trueの場合は取消し時に削除し、それ以外の場合は削除しない。getRemoveOnCancelPolicy()public boolean getRemoveOnCancelPolicy()
falseです。 truesetRemoveOnCancelPolicy(boolean)public void shutdown()
このメソッドは、以前に送信されたタスクが実行を完了するのを待機しません。 これを実行するには、awaitTerminationを使ってください。
ExecuteExistingDelayedTasksAfterShutdownPolicyがfalseに設定されていた場合、遅延時間が経過していない既存の遅延タスクは取り消されます。 また、ContinueExistingPeriodicTasksAfterShutdownPolicyがtrueに設定されていないかぎり、既存の定期的なタスクの以後の実行は取り消されます。
shutdown、インタフェースExecutorServiceshutdown、クラスThreadPoolExecutorSecurityException - セキュリティ・マネージャが存在する状況でこのExecutorServiceのシャットダウンを実行すると、呼出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission("modifyThread")を保持しないか、セキュリティ・マネージャのcheckAccessメソッドがアクセスを拒否するためである。public List<Runnable> shutdownNow()
このメソッドは、アクティブに実行中のタスクが終了するのを待機しません。 これを実行するには、awaitTerminationを使ってください。
実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。 この実装では、Thread.interrupt()を介してタスクを取り消すため、割り込みに対する応答に失敗したタスクは終了しなくなる可能性があります。
shutdownNow、インタフェースExecutorServiceshutdownNow、クラスThreadPoolExecutorScheduledFutureであり、executeを使用して送信されたタスクが含まれる。これらのタスクはスケジューリング用であり、遅延が0のScheduledFutureの基礎として使用される。 SecurityException - セキュリティ・マネージャが存在する状況でこのExecutorServiceのシャットダウンを実行すると、呼出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission("modifyThread")を保持しないか、セキュリティ・マネージャのcheckAccessメソッドがアクセスを拒否するためである。public BlockingQueue<Runnable> getQueue()
ScheduledFutureであり、executeを使用して送信されたタスクが含まれる。これらのタスクはスケジューリング用であり、遅延が0のScheduledFutureの基礎として使用される。 このキューに対する反復処理では、タスクが実行順序でトラバースされることは保証されません。 getQueue、クラスThreadPoolExecutor バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。