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, toString
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated
public 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)
ScheduledExecutorService
schedule
、インタフェース: ScheduledExecutorService
command
- 実行するタスクdelay
- 現在から遅延実行までの時間unit
- delayパラメータの時間単位get()
メソッドは完了時にnull
を返すRejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- コマンドがnullの場合public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorService
schedule
、インタフェース: ScheduledExecutorService
V
- 呼出し可能タスクの結果の型callable
- 実行する関数delay
- 現在から遅延実行までの時間unit
- delayパラメータの時間単位RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- 呼出し可能レイアウトがnullの場合public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
ScheduledExecutorService
initialDelay
後に開始され、その後はinitialDelay+period
、initialDelay+2 * period
というようになります。タスクを実行して例外が発生すると、以降の実行は抑止されます。そうでない場合は、executorの取り消しまたは終了によってのみタスクは終了します。このタスクを実行するのに指定の期間(period)より長い時間がかかる場合、以降の実行は遅れて開始されることがありますが、並行して実行はされません。scheduleAtFixedRate
、インタフェース: ScheduledExecutorService
command
- 実行するタスクinitialDelay
- 最初の遅延実行までの時間period
- 連続する実行の間隔unit
- initialDelayおよびperiodパラメータの時間単位get()
メソッドは取消し時に例外をスローするRejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- コマンドがnullの場合IllegalArgumentException
- periodが0以下である場合public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
ScheduledExecutorService
scheduleWithFixedDelay
、インタフェース: ScheduledExecutorService
command
- 実行するタスク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
、インタフェース: Executor
execute
、クラス: ThreadPoolExecutor
command
- 実行するタスクRejectedExecutionException
- RejectedExecutionHandler
の判断で、executorがシャットダウンされたため、タスクを実行のために受け入れることができない場合NullPointerException
- command
がnullである場合public Future<?> submit(Runnable task)
ExecutorService
get
メソッドは、正常に
完了した時点でnullを返します。submit
、インタフェース: ExecutorService
submit
、クラス: AbstractExecutorService
task
- 送信するタスクRejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクがnullの場合public <T> Future<T> submit(Runnable task, T result)
ExecutorService
get
メソッドは、正常に完了した時点で指定された結果を返します。submit
、インタフェース: ExecutorService
submit
、クラス: AbstractExecutorService
T
- 結果の型task
- 送信するタスクresult
- 返す結果RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクがnullの場合public <T> Future<T> submit(Callable<T> task)
ExecutorService
get
メソッドは、正常に完了した時点でタスクの結果を返します。
タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get();
の形式の構築を使用できます。
注: Executors
クラスには、クロージャに似たほかの一般オブジェクトを変換できるメソッド・セットが含まれます。たとえば、PrivilegedAction
をCallable
形式に変換して、送信可能にすることができます。
submit
、インタフェース: ExecutorService
submit
、クラス: AbstractExecutorService
T
- タスクの結果の型task
- 送信するタスクRejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクがnullの場合public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
shutdown
が実行されたときでも設定します。この場合、これらのタスクが終了するのは、shutdownNow
の実行時か、すでにシャットダウンが実行されポリシーをfalse
に設定したあとに限られます。この値はデフォルトでfalse
です。value
- true
の場合はシャットダウン後に続行し、それ以外の場合は続行しないgetContinueExistingPeriodicTasksAfterShutdownPolicy()
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
shutdown
が実行されたときでも取得します。この場合、これらのタスクが終了するのは、shutdownNow
の実行時か、すでにシャットダウンが実行されポリシーをfalse
に設定したあとに限られます。この値はデフォルトでfalse
です。true
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
shutdown
が実行されたときでも取得します。この場合、これらのタスクが終了するのは、shutdownNow
の実行時か、すでにシャットダウンが実行されポリシーをfalse
に設定したあとに限られます。この値はデフォルトでtrue
です。value
- true
の場合はシャットダウン後に実行し、それ以外の場合は実行しないgetExecuteExistingDelayedTasksAfterShutdownPolicy()
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
shutdown
が実行されたときでも取得します。この場合、これらのタスクが終了するのは、shutdownNow
の実行時か、すでにシャットダウンが実行されポリシーをfalse
に設定したあとに限られます。この値はデフォルトでtrue
です。true
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)
public void setRemoveOnCancelPolicy(boolean value)
false
です。value
- true
の場合は取消し時に削除し、それ以外の場合は削除しない。getRemoveOnCancelPolicy()
public boolean getRemoveOnCancelPolicy()
false
です。true
setRemoveOnCancelPolicy(boolean)
public void shutdown()
このメソッドは、以前に送信されたタスクが実行を完了するのを待機しません。これを実行するには、awaitTermination
を使ってください。
ExecuteExistingDelayedTasksAfterShutdownPolicy
がfalse
に設定されていた場合、遅延時間が経過していない既存の遅延タスクは取り消されます。また、ContinueExistingPeriodicTasksAfterShutdownPolicy
がtrue
に設定されていないかぎり、既存の定期的なタスクの以後の実行は取り消されます。
shutdown
、インタフェース: ExecutorService
shutdown
、クラス: ThreadPoolExecutor
SecurityException
- セキュリティ・マネージャが存在する状況でこのExecutorServiceのシャットダウンを実行すると、呼出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread")
を保持しないか、セキュリティ・マネージャのcheckAccess
メソッドがアクセスを拒否するためである。public List<Runnable> shutdownNow()
このメソッドは、アクティブに実行中のタスクが終了するのを待機しません。これを実行するには、awaitTermination
を使ってください。
実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。この実装では、Thread.interrupt()
を介してタスクを取り消すため、割り込みに対する応答に失敗したタスクは終了しなくなる可能性があります。
shutdownNow
、インタフェース: ExecutorService
shutdownNow
、クラス: ThreadPoolExecutor
ScheduledFuture
であり、execute
を使用して送信されたタスクが含まれる。これらのタスクはスケジューリング用であり、遅延が0のScheduledFuture
の基礎として使用される。SecurityException
- セキュリティ・マネージャが存在する状況でこのExecutorServiceのシャットダウンを実行すると、呼出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread")
を保持しないか、セキュリティ・マネージャのcheckAccess
メソッドがアクセスを拒否するためである。public BlockingQueue<Runnable> getQueue()
ScheduledFuture
であり、execute
を使用して送信されたタスクが含まれる。これらのタスクはスケジューリング用であり、遅延が0のScheduledFuture
の基礎として使用される。このキューに対する反復処理では、タスクが実行順序でトラバースされることは保証されません。getQueue
、クラス: ThreadPoolExecutor
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.