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)
runnable
- 送信された Runnabletask
- Runnable を実行するために作成されたタスクprotected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)
callable
- 送信された Callabletask
- Callable を実行するために作成されたタスクpublic ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
ScheduledExecutorService
schedule
、インタフェース: ScheduledExecutorService
command
- 実行するタスクdelay
- 現在から遅延実行までの時間unit
- delay パラメータの時間単位RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- コマンドが null の場合public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorService
schedule
、インタフェース: ScheduledExecutorService
callable
- 実行する関数delay
- 現在から遅延実行までの時間unit
- delay パラメータの時間単位RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- 呼び出し可能レイアウトが null の場合public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
ScheduledExecutorService
scheduleAtFixedRate
、インタフェース: ScheduledExecutorService
command
- 実行するタスクinitialDelay
- 最初の遅延実行までの時間period
- 連続する実行の間隔unit
- initialDelay および period パラメータの時間単位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 パラメータの時間単位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
submit
、インタフェース: ExecutorService
submit
、クラス: AbstractExecutorService
task
- 送信するタスクRejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクが null の場合public <T> Future<T> submit(Runnable task, T result)
ExecutorService
submit
、インタフェース: ExecutorService
submit
、クラス: AbstractExecutorService
task
- 送信するタスクresult
- 返す結果RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクが null の場合public <T> Future<T> submit(Callable<T> task)
ExecutorService
タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get(); の形式の構築を使用できます。
注:Executors
クラスには、クロージャーに似たほかの一般オブジェクトを変換できるメソッドセットが含まれます。たとえば、PrivilegedAction
を Callable
形式に変換して、送信可能にすることができます。
submit
、インタフェース: ExecutorService
submit
、クラス: AbstractExecutorService
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, 2013, Oracle and/or its affiliates. All rights reserved.