JavaTM Platform
Standard Ed. 6

java.util.concurrent
クラス ScheduledThreadPoolExecutor

java.lang.Object
  上位を拡張 java.util.concurrent.AbstractExecutorService
      上位を拡張 java.util.concurrent.ThreadPoolExecutor
          上位を拡張 java.util.concurrent.ScheduledThreadPoolExecutor
すべての実装されたインタフェース:
Executor, ExecutorService, ScheduledExecutorService

public class ScheduledThreadPoolExecutor
extends ThreadPoolExecutor
implements ScheduledExecutorService

指定された遅延時間後または定期的にコマンドを実行するように追加でスケジュールできる ThreadPoolExecutor です。複数のワークスレッドが必要な場合、またはこのクラスが拡張する ThreadPoolExecutor が持つさらなる柔軟性や機能が要求される場合は、Timer よりもこのクラスを使用することをお勧めします。

遅延タスクは有効になるとすぐに実行されますが、有効になったあといつ開始されるかについては、リアルタイム保証がありません。まったく同じ実行時刻にスケジュール設定されたタスクは、送信の先入れ先出し (FIFO) 順に有効になります。

このクラスは ThreadPoolExecutor から継承されますが、継承されたチューニングメソッドの一部は有用ではありません。特に、corePoolSize スレッドとアンバウンド形式のキューを使用する固定サイズプールとして動作するため、maximumPoolSize を調整しても有益な結果は得られません。

拡張の注意: このクラスは AbstractExecutorService submit メソッドをオーバーライドして、タスク単位の遅延とスケジューリングを制御する内部オブジェクトを生成します。機能を保護するために、サブクラスでこれらのメソッドをこれ以上オーバーライドする場合は、スーパークラスバージョンを呼び出す必要があります。これにより、タスクの追加のカスタマイズが実質的に無効になります。ただしこのタスクでは、代替の 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

入れ子のクラスの概要
 
クラス 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
<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()
          既存の定期的なタスクの実行を継続するかどうかに関するポリシーを取得します。
 boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
          既存の遅延タスクを実行するかどうかに関するポリシーを取得します。
 BlockingQueue<Runnable> getQueue()
          この executor で使用するタスクキューを返します。
 boolean remove(Runnable task)
          executor の内部キューにこのタスクが存在する場合は削除するため、そのタスクがまだ開始されていない場合は実行されません。
<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)
          指定された初期遅延の経過後にはじめて有効になり、その後は指定された期間ごとに有効になる定期的なアクションを作成して実行します。
 ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
          指定された初期遅延の経過後にはじめて有効になり、その後は実行の終了後から次の開始までの指定の遅延ごとに有効になる定期的なアクションを作成して実行します。
 void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
          既存の定期的なタスクの実行を継続するかどうかに関するポリシーを設定します。
 void setExecuteExistingDelayedTasksAfterShutdownPolicy(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 を返します。
 
クラス java.util.concurrent.ThreadPoolExecutor から継承されたメソッド
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, terminated
 
クラス 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
 

コンストラクタの詳細

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize)
指定されたコアプールサイズで、新しい ScheduledThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
例外:
IllegalArgumentException - corePoolSize < 0 の場合

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory)
指定された初期パラメータを使って、新しい ScheduledThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
threadFactory - executor が新しいスレッドを作成するときに使用するファクトリ
例外:
IllegalArgumentException - corePoolSize < 0 の場合
NullPointerException - threadFactory が null の場合

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   RejectedExecutionHandler handler)
指定された初期パラメータを使って、新しい ScheduledThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
handler - スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラ
例外:
IllegalArgumentException - corePoolSize < 0 の場合
NullPointerException - ハンドラが null の場合

ScheduledThreadPoolExecutor

public ScheduledThreadPoolExecutor(int corePoolSize,
                                   ThreadFactory threadFactory,
                                   RejectedExecutionHandler handler)
指定された初期パラメータを使って、新しい ScheduledThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
threadFactory - executor が新しいスレッドを作成するときに使用するファクトリ
handler - スレッドの境界およびキューの容量に達したため、実行がブロックされたときに使用するハンドラ
例外:
IllegalArgumentException - corePoolSize < 0 の場合
NullPointerException - threadFactory またはハンドラが null の場合
メソッドの詳細

remove

public boolean remove(Runnable task)
クラス ThreadPoolExecutor の記述:
executor の内部キューにこのタスクが存在する場合は削除するため、そのタスクがまだ開始されていない場合は実行されません。

このメソッドは取り消し方式の一部として便利なことがあります。内部キューに配置される前に別の形式に変換されたタスクは、削除に失敗する可能性があります。たとえば、submit を使用して入るタスクは、Future 状態を維持する形式に変換されることがあります。ただし、この場合は、ThreadPoolExecutor.purge() メソッドを使用して、取り消された Future を削除することができます。

オーバーライド:
クラス ThreadPoolExecutor 内の remove
パラメータ:
task - 削除するタスク
戻り値:
タスクが削除された場合は true

decorateTask

protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable,
                                                      RunnableScheduledFuture<V> task)
runnable を実行するために使用するタスクを変更または置換します。このメソッドは、内部タスクを管理するための具象クラスをオーバーライドするために使用できます。デフォルトの実装は単に指定されたタスクを返します。

パラメータ:
runnable - 送信された Runnable
task - runnable を実行するために作成されたタスク
戻り値:
runnable を実行できるタスク
導入されたバージョン:
1.6

decorateTask

protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable,
                                                      RunnableScheduledFuture<V> task)
呼び出し可能レイアウトを実行するために使用するタスクを変更または置換します。このメソッドは、内部タスクを管理するための具象クラスをオーバーライドするために使用できます。デフォルトの実装は単に指定されたタスクを返します。

パラメータ:
callable - 送信された Callable
task - 呼び出し可能レイアウトを実行するために作成されたタスク
戻り値:
呼び出し可能レイアウトを実行できるタスク
導入されたバージョン:
1.6

schedule

public ScheduledFuture<?> schedule(Runnable command,
                                   long delay,
                                   TimeUnit unit)
インタフェース ScheduledExecutorService の記述:
指定された遅延後に有効になる単発的なアクションを作成して実行します。

定義:
インタフェース ScheduledExecutorService 内の schedule
パラメータ:
command - 実行するタスク
delay - 現在から遅延実行までの時間
unit - delay パラメータの時間単位
戻り値:
タスクの保留状態の完了を表す ScheduledFuture。その get() メソッドは完了時に null を返す

schedule

public <V> ScheduledFuture<V> schedule(Callable<V> callable,
                                       long delay,
                                       TimeUnit unit)
インタフェース ScheduledExecutorService の記述:
指定された遅延後に有効になる ScheduledFuture を作成して実行します。

定義:
インタフェース ScheduledExecutorService 内の schedule
パラメータ:
callable - 実行する関数
delay - 現在から遅延実行までの時間
unit - delay パラメータの時間単位
戻り値:
結果を抽出または取り消すために使用できる ScheduledFuture

scheduleAtFixedRate

public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                              long initialDelay,
                                              long period,
                                              TimeUnit unit)
インタフェース ScheduledExecutorService の記述:
指定された初期遅延の経過後にはじめて有効になり、その後は指定された期間ごとに有効になる定期的なアクションを作成して実行します。つまり実行は initialDelay 後に開始され、その後は initialDelay+periodinitialDelay + 2 * period というようになります。タスクを実行して例外が発生すると、以降の実行は抑止されます。そうでない場合は、executor の取り消しまたは終了によってのみタスクは終了します。このタスクを実行するのに指定の期間 (period) より長い時間がかかる場合、以降の実行は遅れて開始されることがありますが、並行して実行はされません。

定義:
インタフェース ScheduledExecutorService 内の scheduleAtFixedRate
パラメータ:
command - 実行するタスク
initialDelay - 最初の遅延実行までの時間
period - 連続する実行の間隔
unit - initialDelay および period パラメータの時間単位
戻り値:
タスクの保留状態の完了を表す ScheduledFuture。その get() メソッドは取り消し時に例外をスローする

scheduleWithFixedDelay

public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                 long initialDelay,
                                                 long delay,
                                                 TimeUnit unit)
インタフェース ScheduledExecutorService の記述:
指定された初期遅延の経過後にはじめて有効になり、その後は実行の終了後から次の開始までの指定の遅延ごとに有効になる定期的なアクションを作成して実行します。タスクを実行して例外が発生すると、以降の実行は抑止されます。そうでない場合は、executor の取り消しまたは終了によってのみタスクは終了します。

定義:
インタフェース ScheduledExecutorService 内の scheduleWithFixedDelay
パラメータ:
command - 実行するタスク
initialDelay - 最初の遅延実行までの時間
delay - 実行の終了後から次の開始までの遅延
unit - initialDelay および delay パラメータの時間単位
戻り値:
タスクの保留状態の完了を表す ScheduledFuture。その get() メソッドは取り消し時に例外をスローする

execute

public void execute(Runnable command)
要求された遅延がゼロで、command を実行します。これは、schedule(command, 0, anyUnit) と実質的に同等です。キューの検証および shutdownNow で返されるリストの検証では、command 自体ではなく、遅延がゼロの ScheduledFuture にアクセスします。

定義:
インタフェース Executor 内の execute
オーバーライド:
クラス ThreadPoolExecutor 内の execute
パラメータ:
command - 実行するタスク
例外:
RejectedExecutionException - RejectedExecutionHandler の判断で、executor がシャットダウンされたためにタスクの実行を受け入れることができない場合
NullPointerException - コマンドが null の場合

submit

public Future<?> submit(Runnable task)
インタフェース ExecutorService の記述:
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。Future の get メソッドは、正常に完了した時点で null を返します。

定義:
インタフェース ExecutorService 内の submit
オーバーライド:
クラス AbstractExecutorService 内の submit
パラメータ:
task - 送信するタスク
戻り値:
タスクの保留完了を表す Future

submit

public <T> Future<T> submit(Runnable task,
                            T result)
インタフェース ExecutorService の記述:
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。Future の get メソッドは、正常に完了した時点で指定された結果を返します。

定義:
インタフェース ExecutorService 内の submit
オーバーライド:
クラス AbstractExecutorService 内の submit
パラメータ:
task - 送信するタスク
result - 返す結果
戻り値:
タスクの保留完了を表す Future

submit

public <T> Future<T> submit(Callable<T> task)
インタフェース ExecutorService の記述:
値を返す実行用タスクを送信して、保留状態のタスク結果を表す Future を返します。Future の get メソッドは、正常に完了した時点でタスクの結果を返します。

タスクの待機をただちにブロックする場合は、result = exec.submit(aCallable).get(); の形式の構築を使用できます。

注:Executors クラスには、クロージャーに似た他の一般オブジェクトを変換できるメソッドセットが含まれます。たとえば、PrivilegedActionCallable 形式に変換して、送信可能にすることができます。

定義:
インタフェース ExecutorService 内の submit
オーバーライド:
クラス AbstractExecutorService 内の submit
パラメータ:
task - 送信するタスク
戻り値:
タスクの保留完了を表す Future

setContinueExistingPeriodicTasksAfterShutdownPolicy

public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
既存の定期的なタスクの実行を継続するかどうかに関するポリシーを設定します。この executor で shutdown が実行されたときでも設定します。この場合、これらのタスクが終了するのは、shutdownNow の実行時に限られるか、すでに shutdown が実行されポリシーを false に設定したあとです。この値はデフォルトで false です。

パラメータ:
value - true の場合はシャットダウン後に続行し、そうでない場合は続行しない
関連項目:
getContinueExistingPeriodicTasksAfterShutdownPolicy()

getContinueExistingPeriodicTasksAfterShutdownPolicy

public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
既存の定期的なタスクの実行を継続するかどうかに関するポリシーを取得します。この executor で shutdown が実行されたときでも取得します。この場合、これらのタスクが終了するのは、shutdownNow の実行時に限られるか、すでに shutdown が実行されポリシーを false に設定したあとです。この値はデフォルトで false です。

戻り値:
シャットダウン後に続行する場合は true
関連項目:
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)

setExecuteExistingDelayedTasksAfterShutdownPolicy

public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
既存の遅延タスクを実行するかどうかに関するポリシーを設定します。この executor で shutdown が実行されたときでも設定します。この場合、これらのタスクが終了するのは、shutdownNow の実行時に限られるか、すでに shutdown が実行されポリシーを false に設定したあとです。この値はデフォルトで true です。

パラメータ:
value - true の場合はシャットダウン後に実行し、そうでない場合は実行しない
関連項目:
getExecuteExistingDelayedTasksAfterShutdownPolicy()

getExecuteExistingDelayedTasksAfterShutdownPolicy

public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
既存の遅延タスクを実行するかどうかに関するポリシーを取得します。この executor で shutdown が実行されたときでも取得します。この場合、これらのタスクが終了するのは、shutdownNow の実行時に限られるか、すでに shutdown が実行されポリシーを false に設定したあとです。この値はデフォルトで true です。

戻り値:
シャットダウン後に実行する場合は true
関連項目:
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)

shutdown

public void shutdown()
順序正しくシャットダウンを開始します。以前に送信されたタスクが実行されますが、新規タスクは受け入れられません。ExecuteExistingDelayedTasksAfterShutdownPolicyfalse に設定されていた場合、遅延時間が経過していない既存の遅延タスクは取り消されます。また、ContinueExistingPeriodicTasksAfterShutdownPolicytrue に設定されないかぎり、既存の定期的なタスクの以後の実行は取り消されます。

定義:
インタフェース ExecutorService 内の shutdown
オーバーライド:
クラス ThreadPoolExecutor 内の shutdown

shutdownNow

public List<Runnable> shutdownNow()
実行中のアクティブなタスクすべての停止を試み、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返します。

実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。この実装では、Thread.interrupt() を介してタスクを取り消すため、割り込みに対する応答に失敗したタスクは終了しなくなる可能性があります。

定義:
インタフェース ExecutorService 内の shutdownNow
オーバーライド:
クラス ThreadPoolExecutor 内の shutdownNow
戻り値:
実行が開始されなかったタスクのリスト。このリストの各要素は ScheduledFuture であり、execute を使用して送信されたタスクが含まれる。これらのタスクはスケジューリング用であり、遅延がゼロの ScheduledFuture の基礎として使用される
例外:
SecurityException - セキュリティーマネージャーが存在する状況でこの ExecutorService のシャットダウンを実行すると、呼び出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission("modifyThread") を保持しないか、セキュリティーマネージャーの checkAccess メソッドがアクセスを拒否するためである

getQueue

public BlockingQueue<Runnable> getQueue()
この executor で使用するタスクキューを返します。このキューの各要素は ScheduledFuture であり、execute を使用して送信されたタスクが含まれます。これらのタスクはスケジューリング用であり、遅延がゼロの ScheduledFuture の基礎として使用されます。このキューに対する反復処理では、タスクが実行順序でトラバースされることは保証されません。

オーバーライド:
クラス ThreadPoolExecutor 内の getQueue
戻り値:
タスクキュー

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。