|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.concurrent.AbstractExecutorService java.util.concurrent.ThreadPoolExecutor java.util.concurrent.ScheduledThreadPoolExecutor
public class ScheduledThreadPoolExecutor
指定された遅延時間後または定期的にコマンドを実行するように追加でスケジュールできる ThreadPoolExecutor
です。複数のワークスレッドが必要な場合、またはこのクラスが拡張する ThreadPoolExecutor
が持つさらなる柔軟性や機能が要求される場合は、Timer
よりもこのクラスを使用することをお勧めします。
遅延タスクは有効になるとすぐに実行されますが、有効になったあといつ開始されるかについては、リアルタイム保証がありません。まったく同じ実行時刻にスケジュール設定されたタスクは、送信の先入れ先出し (FIFO) 順に有効になります。
このクラスは ThreadPoolExecutor
から継承されますが、継承されたチューニングメソッドの一部は有用ではありません。特に、corePoolSize スレッドとアンバウンド形式のキューを使用する固定サイズプールとして動作するため、maximumPoolSize を調整しても有益な結果は得られません。
拡張の注意: このクラスは AbstractExecutorService
submit メソッドをオーバーライドして、タスク単位の遅延とスケジューリングを制御する内部オブジェクトを生成します。機能を保護するために、サブクラスでこれらのメソッドをこれ以上オーバーライドする場合は、スーパークラスバージョンを呼び出す必要があります。これにより、タスクの追加のカスタマイズが実質的に無効になります。ただしこのタスクでは、代替の 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. }
入れ子のクラスの概要 |
---|
クラス java.util.concurrent.ThreadPoolExecutor から継承された入れ子のクラス/インタフェース |
---|
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
|
decorateTask(Callable<V> callable,
RunnableScheduledFuture<V> task)
呼び出し可能レイアウトを実行するために使用するタスクを変更または置換します。 |
|
protected
|
decorateTask(Runnable runnable,
RunnableScheduledFuture<V> task)
runnable を実行するために使用するタスクを変更または置換します。 |
|
void |
execute(Runnable command)
要求された遅延がゼロで、command を実行します。 |
|
boolean |
getContinueExistingPeriodicTasksAfterShutdownPolicy()
既存の定期的なタスクの実行を継続するかどうかに関するポリシーを取得します。 |
|
boolean |
getExecuteExistingDelayedTasksAfterShutdownPolicy()
既存の遅延タスクを実行するかどうかに関するポリシーを取得します。 |
|
BlockingQueue<Runnable> |
getQueue()
この executor で使用するタスクキューを返します。 |
|
boolean |
remove(Runnable task)
executor の内部キューにこのタスクが存在する場合は削除するため、そのタスクがまだ開始されていない場合は実行されません。 |
|
|
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)
指定された初期遅延の経過後にはじめて有効になり、その後は指定された期間ごとに有効になる定期的なアクションを作成して実行します。 |
|
ScheduledFuture<?> |
scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit)
指定された初期遅延の経過後にはじめて有効になり、その後は実行の終了後から次の開始までの指定の遅延ごとに有効になる定期的なアクションを作成して実行します。 |
|
void |
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
既存の定期的なタスクの実行を継続するかどうかに関するポリシーを設定します。 |
|
void |
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
既存の遅延タスクを実行するかどうかに関するポリシーを設定します。 |
|
void |
shutdown()
順序正しくシャットダウンを開始します。 |
|
List<Runnable> |
shutdownNow()
実行中のアクティブなタスクすべての停止を試み、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返します。 |
|
|
submit(Callable<T> task)
値を返す実行用タスクを送信して、保留状態のタスク結果を表す Future を返します。 |
|
Future<?> |
submit(Runnable task)
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。 |
|
|
submit(Runnable task,
T result)
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。 |
クラス java.util.concurrent.AbstractExecutorService から継承されたメソッド |
---|
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
インタフェース java.util.concurrent.ExecutorService から継承されたメソッド |
---|
awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated |
コンストラクタの詳細 |
---|
public ScheduledThreadPoolExecutor(int corePoolSize)
corePoolSize
- プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
IllegalArgumentException
- corePoolSize < 0 の場合public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory)
corePoolSize
- プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)threadFactory
- executor が新しいスレッドを作成するときに使用するファクトリ
IllegalArgumentException
- corePoolSize < 0 の場合
NullPointerException
- threadFactory が null の場合public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)
corePoolSize
- プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)handler
- スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラ
IllegalArgumentException
- corePoolSize < 0 の場合
NullPointerException
- ハンドラが null の場合public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize
- プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)threadFactory
- executor が新しいスレッドを作成するときに使用するファクトリhandler
- スレッドの境界に達し、キューの容量に達したため、実行がブロックされたときに使用されるハンドラ
IllegalArgumentException
- corePoolSize < 0 の場合
NullPointerException
- threadFactory またはハンドラが null の場合メソッドの詳細 |
---|
public boolean remove(Runnable task)
ThreadPoolExecutor
の記述: このメソッドは取り消し方式の一部として便利なことがあります。内部キューに配置される前に別の形式に変換されたタスクは、削除に失敗する可能性があります。たとえば、submit を使用して入るタスクは、Future 状態を維持する形式に変換されることがあります。ただし、この場合は、ThreadPoolExecutor.purge()
メソッドを使用して、取り消された Future を削除することができます。
ThreadPoolExecutor
内の remove
task
- 削除するタスク
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
- 呼び出し可能レイアウトを実行するために作成されたタスク
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
ScheduledExecutorService
の記述:
ScheduledExecutorService
内の schedule
command
- 実行するタスクdelay
- 現在から遅延実行までの時間unit
- delay パラメータの時間単位
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledExecutorService
の記述:
ScheduledExecutorService
内の schedule
callable
- 実行する関数delay
- 現在から遅延実行までの時間unit
- delay パラメータの時間単位
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
ScheduledExecutorService
の記述:
ScheduledExecutorService
内の scheduleAtFixedRate
command
- 実行するタスクinitialDelay
- 最初の遅延実行までの時間period
- 連続する実行の間隔unit
- initialDelay および period パラメータの時間単位
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
ScheduledExecutorService
の記述:
ScheduledExecutorService
内の scheduleWithFixedDelay
command
- 実行するタスクinitialDelay
- 最初の遅延実行までの時間delay
- 実行の終了後から次の開始までの遅延unit
- initialDelay および delay パラメータの時間単位
public void execute(Runnable command)
ScheduledFuture
にアクセスします。
Executor
内の execute
ThreadPoolExecutor
内の execute
command
- 実行するタスク
RejectedExecutionException
- RejectedExecutionHandler の判断で、executor がシャットダウンされたためにタスクの実行を受け入れることができない場合
NullPointerException
- コマンドが null の場合public Future<?> submit(Runnable task)
ExecutorService
の記述:
ExecutorService
内の submit
AbstractExecutorService
内の submit
task
- 送信するタスク
public <T> Future<T> submit(Runnable task, T result)
ExecutorService
の記述:
ExecutorService
内の submit
AbstractExecutorService
内の submit
task
- 送信するタスクresult
- 返す結果
public <T> Future<T> submit(Callable<T> task)
ExecutorService
の記述:タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get(); の形式の構築を使用できます。
注:Executors
クラスには、クロージャーに似たほかの一般オブジェクトを変換できるメソッドセットが含まれます。たとえば、PrivilegedAction
を Callable
形式に変換して、送信可能にすることができます。
ExecutorService
内の submit
AbstractExecutorService
内の submit
task
- 送信するタスク
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
value
- true の場合はシャットダウン後に続行し、そうでない場合は続行しないgetContinueExistingPeriodicTasksAfterShutdownPolicy()
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
value
- true の場合はシャットダウン後に実行し、そうでない場合は実行しないgetExecuteExistingDelayedTasksAfterShutdownPolicy()
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)
public void shutdown()
ExecutorService
内の shutdown
ThreadPoolExecutor
内の shutdown
public List<Runnable> shutdownNow()
実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。この実装では、Thread.interrupt()
を介してタスクを取り消すため、割り込みに対する応答に失敗したタスクは終了しなくなる可能性があります。
ExecutorService
内の shutdownNow
ThreadPoolExecutor
内の shutdownNow
ScheduledFuture
であり、execute を使用して送信されたタスクが含まれる。これらのタスクはスケジューリング用であり、遅延がゼロの ScheduledFuture の基礎として使用される
SecurityException
- セキュリティーマネージャーが存在する状況でこの ExecutorService のシャットダウンを実行すると、呼び出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread") を保持しないか、セキュリティーマネージャーの checkAccess メソッドがアクセスを拒否するためであるpublic BlockingQueue<Runnable> getQueue()
ScheduledFuture
であり、execute を使用して送信されたタスクが含まれます。これらのタスクはスケジューリング用であり、遅延がゼロの ScheduledFuture の基礎として使用されます。このキューに対する反復処理では、タスクが実行順序でトラバースされることは保証されません。
ThreadPoolExecutor
内の getQueue
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。