JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent
クラス ThreadPoolExecutor

java.lang.Object
  上位を拡張 java.util.concurrent.AbstractExecutorService
      上位を拡張 java.util.concurrent.ThreadPoolExecutor
すべての実装されたインタフェース:
Executor, ExecutorService
直系の既知のサブクラス:
ScheduledThreadPoolExecutor

public class ThreadPoolExecutor
extends AbstractExecutorService

多くの場合、プールされた複数のスレッドのいずれかを使用して、送信された各タスクを実行する ExecutorService。通常は、Executors ファクトリメソッドを使用して構成されます。

スレッドプールは、タスクごとの呼び出しのオーバーヘッドを減少させることで大量の非同期タスクを実行する際のパフォーマンスを改善し、タスクのコレクションを実行する際に消費されるスレッド等のリソースを制限および管理する手段を提供することで、異なる 2 つの問題に対応します。各 ThreadPoolExecutor も、完了タスクの数などのいくつかの基本的な統計を管理します。

広範なコンテキストで有用であるために、このクラスは調整可能な多数のパラメータおよび拡張機能フックを提供します。ただし、プログラマは、より利便性の高い Executors ファクトリメソッドである Executors.newCachedThreadPool() (アンバウンド形式のスレッドプール、自動スレッド再生を含む)、Executors.newFixedThreadPool(int) (固定サイズのスレッドプール)、および Executors.newSingleThreadExecutor() (単独のバックグラウンドスレッド) を使用することが推奨されています。これらのメソッドは、一般に使用される大半のシナリオに合わせてあらかじめ設定されています。そうでない場合は、次に示すガイドに従ってこのクラスを手動で構成およびチューニングしてください。

コアおよび最大プールサイズ
ThreadPoolExecutor は、corePoolSize (getCorePoolSize() を参照) および maximumPoolSize (getMaximumPoolSize() を参照) の課す制限に従って、プールサイズ (getPoolSize() を参照) を自動調整します。新規タスクが execute(java.lang.Runnable) メソッド内で送信され、corePoolSize スレッドより実行中の数が少ない場合、他のワーカスレッドがアイドル状態の場合でも、要求を処理するために新規スレッドが作成されます。実行中の数が corePoolSize スレッドより多く、maximumPoolSize スレッドよりも少ない場合、キューがいっぱいになっている場合にのみ新規スレッドが作成されます。corePoolSize および maximumPoolSize を同じに設定することで、固定サイズのスレッドプールを作成します。maximumPoolSize を Integer.MAX_VALUE などの原則的に無制限な値に設定することで、プールが任意の数の同時タスクを受け入れることが可能になります。通常、コアおよび最大プールサイズは構築時にのみ設定されますが、setCorePoolSize(int) および setMaximumPoolSize(int) を使用して動的に変更することも可能です。
要求に応じた構築
デフォルトでは、コアスレッドが最初に作成され、必要なときだけ新規タスクにより起動される場合でも、prestartCoreThread()prestartAllCoreThreads() メソッドを使用して動的にオーバーライドされる場合があります。
新規スレッドの作成
新規スレッドは、ThreadFactory を使用して作成されます。指定されていない場合は、Executors.defaultThreadFactory() を使用して、作成するスレッドすべてが同じ ThreadGroupNORM_PRIORITY 優先度、および非デーモン状態を保持するようにします。異なる ThreadFactory を指定することで、スレッドの名前、スレッドグループ、優先順位、デーモンの状態などを変更できます。newThread から null が返された時に要求された ThreadFactory でスレッドの作成に失敗した場合、executor は続行しますが、タスクを実行できない可能性があります。
キープアライブ時間
プールが現在 corePoolSize を超えるスレッドを保持している場合、アイドル状態の時間が keepAliveTime (getKeepAliveTime(java.util.concurrent.TimeUnit) を参照) を超過すると、超過したスレッドは終了します。これにより、プールがアクティブに使用されていない場合に、リソースの消費を抑えることができます。プールがあとでよりアクティブになると、新規スレッドが作成されます。このパラメータは、setKeepAliveTime(long, java.util.concurrent.TimeUnit) メソッドを使用して動的に変更することも可能です。Long.MAX_VALUE TimeUnit.NANOSECONDS 値を使用すると、アイドル状態のスレッドがシャットダウン前に終了しないようにできます。
キューイング
任意の BlockingQueue を使用して、送信済みのタスクを転送および保持できます。このキューを使用すると、プールのサイズ変更が対話的に処理されます。 キューイングには、次の 3 つのストラテジがあります。
  1. 直接ハンドオフ。作業キュー用の優れたデフォルト選択である SynchronousQueue は、スレッドを別に保持することなくスレッドに渡す。ここで、すぐに実行可能なスレッドが存在しない場合、タスクをキューに入れようとする試みは失敗するため、新規スレッドが作成される。このポリシーは、内部依存性を保持する可能性のある要求セットを処理する際、ロックアップを回避する。通常、直接ハンドオフでは、新しく送信されるタスクが拒否されるのを回避するためにアンバウンド形式の maximumPoolSizes が必要になる。一方、この場合、全体として処理能力を超える速さでコマンドが次々に到着すると、アンバウンド形式のスレッドが大きくなる可能性がある
  2. アンバウンド形式のキュー。アンバウンド形式のキュー (定義済みの容量を持たない LinkedBlockingQueue など) を使用すると、すべての corePoolSize スレッドがビジー状態にある場合に新規タスクがキューに入れられる。このため、corePoolSize を超えるスレッドは作成されない (従って、maximumPoolSize の値は影響を及ぼさない)。これが適切なのは、Web ページサーバ内など、各タスクが他のタスクから完全に独立しているために、タスクが他のタスクの実行に影響を及ぼすことがない場合である。このキュースタイルは、一時的に急増した要求を処理する場合などに有用であるが、全体として処理能力を超える速さでコマンドが次々に到着すると、アンバウンド形式の作業キューが大きくなる可能性がある
  3. バウンド形式のキュー。バウンド形式のキュー (ArrayBlockingQueue など) は、限定された maximumPoolSizes とともに使用するとリソースの枯渇を防ぐ場合に役立つが、チューニングや制御が困難になる可能性がある。キューサイズと最大プールサイズは、トレードオフの関係にある。大規模なキューと小規模なプールを使用すると、CPU の使用、OS のリソース、およびコンテキスト切り替えのオーバーヘッドをできるだけ減らすことができるが、そのためにスループットが低下する可能性がある。タスクが頻繁にブロックする (たとえば、入出力が制限される) 場合、他の方法で許可するよりも多くのスレッドに対してシステムが時間をスケジュールできる。通常、小規模なキューを使用すると、大量のプールサイズが必要になる。これにより、CPU のビジー状態が多くなるが、受け入れ不可のスケジューリングオーバーヘッドに遭遇する可能性があるため、やはりスループットが低下する
拒否されたタスク
Executor がシャットダウンしている場合、および Executor が最大スレッドと作業キュー容量の両方を制限し、それが飽和状態にある場合、execute(java.lang.Runnable) メソッド内に送信された新規タスクは「拒否」されます。どちらの場合も、execute メソッドは RejectedExecutionHandlerRejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) メソッドを呼び出します。次の 4 つの定義済みハンドラポリシーが提供されます。
  1. デフォルトの ThreadPoolExecutor.AbortPolicy では、拒否されると、ハンドラは実行時の RejectedExecutionException をスローする
  2. ThreadPoolExecutor.CallerRunsPolicy では、execute 自体を呼び出すスレッドがタスクを実行する。これにより、単純なフィードバック制御メカニズムが提供され、結果として新規タスクの送信レートが低下する
  3. ThreadPoolExecutor.DiscardPolicy では、実行不可能なタスクは単に削除される
  4. ThreadPoolExecutor.DiscardOldestPolicy では、executor がシャットダウンしていない場合、作業キューの先頭にあるタスクが削除され、実行が再度試みられる (再度失敗する可能性もあり、その場合はこれが繰り返される)
他の種類の RejectedExecutionHandler クラスを定義および使用することも可能です。この場合、特にポリシーが特定の容量またはキューイングポリシーでのみ動作するように設計されている場合は、注意が必要です。
フックメソッド
このクラスは、protected をオーバーライド可能な beforeExecute(java.lang.Thread, java.lang.Runnable) および afterExecute(java.lang.Runnable, java.lang.Throwable) メソッドを提供します。これは、各タスクの実行前後に呼び出されます。これらは、ThreadLocals の再初期化、統計の収集、ログエントリの追加などの、実行環境の操作に使用できます。また、terminated() メソッドをオーバーライドして、Executor が完全に終了したあとで実行する必要のある特殊な処理を実行できます。

フックメソッドまたはコールバックメソッドが例外をスローすると、内部のワーカスレッドが失敗してただちに終了します。

キューの保守
getQueue() メソッドを使用すると、監視およびデバッグ目的で作業キューにアクセスできます。他の目的でこのメソッドを使用することは、可能なかぎり避けてください。キューに入れられた大量のタスクが取り消された場合、提供される 2 つのメソッド remove(java.lang.Runnable) および purge() を記憶領域の再生の支援に使用できます。

拡張機能の例。このクラスの拡張機能の大半は、1 つ以上の protected フックメソッドをオーバーライドします。次の例は、単純な一時停止/再開機能を追加するサブクラスです。


 class PausableThreadPoolExecutor extends ThreadPoolExecutor {
   private boolean isPaused;
   private ReentrantLock pauseLock = new ReentrantLock();
   private Condition unpaused = pauseLock.newCondition();

   public PausableThreadPoolExecutor(...) { super(...); }
 
   protected void beforeExecute(Thread t, Runnable r) {
     super.beforeExecute(t, r);
     pauseLock.lock();
     try {
       while (isPaused) unpaused.await();
     } catch(InterruptedException ie) {
       t.interrupt();
     } finally {
       pauseLock.unlock();
     }
   }
 
   public void pause() {
     pauseLock.lock();
     try {
       isPaused = true;
     } finally {
       pauseLock.unlock();
     }
   }
 
   public void resume() {
     pauseLock.lock();
     try {
       isPaused = false;
       unpaused.signalAll();
     } finally {
       pauseLock.unlock();
     }
   }
 }
 

導入されたバージョン:
1.5

入れ子のクラスの概要
static class ThreadPoolExecutor.AbortPolicy
          RejectedExecutionException をスローする、拒否されたタスクのハンドラ。
static class ThreadPoolExecutor.CallerRunsPolicy
          executor がシャットダウンしていない場合に、execute メソッドのスレッド呼び出しで拒否されたタスクを直接実行する、拒否されたタスクのハンドラ。
static class ThreadPoolExecutor.DiscardOldestPolicy
          executor がシャットダウンしていない場合に、もっとも古い未処理の要求を破棄して execute を再試行する、拒否されたタスクのハンドラ。
static class ThreadPoolExecutor.DiscardPolicy
          拒否されたタスクを予告なく破棄する、拒否されたタスクのハンドラ。
 
コンストラクタの概要
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)
          指定された初期パラメータおよびデフォルトのスレッドファクトリおよびハンドラを使用して、新規 ThreadPoolExecutor を作成します。
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
          指定された初期パラメータを使用して、新しい ThreadPoolExecutor を作成します。
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory)
          指定された初期パラメータを使用して、新しい ThreadPoolExecutor を作成します。
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
          指定された初期パラメータを使用して、新しい ThreadPoolExecutor を作成します。
 
メソッドの概要
protected  void afterExecute(Runnable r, Throwable t)
          指定された Runnable の実行完了時に呼び出されるメソッド。
 boolean awaitTermination(long timeout, TimeUnit unit)
          シャットダウン要求後にすべてのタスクが実行を完了する、タイムアウトが発生する、現在のスレッドで割り込みが発生する、のどれかが最初に起きるまでブロックします。
protected  void beforeExecute(Thread t, Runnable r)
          指定されたスレッド内で、指定された Runnable の実行に先立って呼び出されるメソッド。
 void execute(Runnable command)
          指定されたタスクを将来のいつか実行します。
protected  void finalize()
          この executor が参照されることがなくなった場合に、shutdown を呼び出します。
 int getActiveCount()
          タスクをアクティブに実行中のスレッドの概数を返します。
 long getCompletedTaskCount()
          実行が完了したタスクのおおよその総数を返します。
 int getCorePoolSize()
          スレッドのコア数を返します。
 long getKeepAliveTime(TimeUnit unit)
          スレッドのキープアライブ時間を返します。
 int getLargestPoolSize()
          これまで同時にプールに存在したスレッドの最大数を返します。
 int getMaximumPoolSize()
          許可されるスレッドの最大数を返します。
 int getPoolSize()
          プール内の現在のスレッド数を返します。
 BlockingQueue<Runnable> getQueue()
          この executor が使用するタスクキューを返します。
 RejectedExecutionHandler getRejectedExecutionHandler()
          実行不可能なタスク用の現在のハンドラを返します。
 long getTaskCount()
          実行がスケジュールされたタスクのおおよその総数を返します。
 ThreadFactory getThreadFactory()
          新規スレッドの作成に使用するスレッドファクトリを返します。
 boolean isShutdown()
          この executorがシャットダウンした場合、true を返します。
 boolean isTerminated()
          シャットダウンに続いてすべてのタスクが完了した場合に、true を返します。
 boolean isTerminating()
          shutdown または shutdownNow 後にこの executor が終了処理を実行中であるが、完全に終了していない場合、true を返します。
 int prestartAllCoreThreads()
          すべてのコアスレッドを開始し、アイドル状態で待機させます。
 boolean prestartCoreThread()
          コアスレッドを開始し、アイドル状態で待機させます。
 void purge()
          作業キューから取り消された Future タスクすべての削除を試みます。
 boolean remove(Runnable task)
          このタスクが存在する場合、executor の内部キューから削除し、まだ起動していないなら実行されないようにします。
 void setCorePoolSize(int corePoolSize)
          スレッドのコア数を設定します。
 void setKeepAliveTime(long time, TimeUnit unit)
          スレッドが終了する前にアイドル状態にとどまる制限時間を設定します。
 void setMaximumPoolSize(int maximumPoolSize)
          許可されるスレッドの最大数を設定します。
 void setRejectedExecutionHandler(RejectedExecutionHandler handler)
          実行不可能なタスク用の新規ハンドラを設定します。
 void setThreadFactory(ThreadFactory threadFactory)
          新規スレッドの作成に使用するスレッドファクトリを設定します。
 void shutdown()
          順序に従って実行されるシャットダウンを開始します。
 List<Runnable> shutdownNow()
          実行中のアクティブなタスクすべての停止を試み、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返します。
protected  void terminated()
          Executor が終了したときに呼び出されるメソッド。
 
クラス java.util.concurrent.AbstractExecutorService から継承されたメソッド
invokeAll, invokeAll, invokeAny, invokeAny, submit, submit, submit
 
クラス java.lang.Object から継承されたメソッド
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue)
指定された初期パラメータおよびデフォルトのスレッドファクトリおよびハンドラを使用して、新規 ThreadPoolExecutor を作成します。この汎用コンストラクタを使用するよりも、Executors ファクトリメソッドの 1 つを使用した方が便利な場合があります。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
maximumPoolSize - プールで許可されるスレッドの最大数
keepAliveTime - スレッドの数がコアよりも多い場合、これは、超過したアイドル状態のスレッドが終了前に新規タスクを待機する最大時間になる
unit - keepAliveTime 引数の時間単位
workQueue - タスクを実行する前に、タスク保持に使用するキュー。このキューは、execute メソッドにより送信された Runnable タスクだけを保持する
例外:
IllegalArgumentException - corePoolSize または keepAliveTime がゼロ未満の場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize より大きい場合
NullPointerException - workQueue が null の場合

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory)
指定された初期パラメータを使用して、新しい ThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
maximumPoolSize - プールで許可されるスレッドの最大数
keepAliveTime - スレッドの数がコアよりも多い場合、これは、超過したアイドル状態のスレッドが終了前に新規タスクを待機する最大時間になる
unit - keepAliveTime 引数の時間単位
workQueue - タスクを実行する前に、タスク保持に使用するキュー。このキューは、execute メソッドにより送信された Runnable タスクだけを保持する
threadFactory - executor が新規スレッドを作成する際に使用するファクトリ
例外:
IllegalArgumentException - corePoolSize または keepAliveTime がゼロ未満の場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize より大きい場合
NullPointerException - workQueue または threadFactory が null の場合

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          RejectedExecutionHandler handler)
指定された初期パラメータを使用して、新しい ThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
maximumPoolSize - プールで許可されるスレッドの最大数
keepAliveTime - スレッドの数がコアよりも多い場合、これは、超過したアイドル状態のスレッドが終了前に新規タスクを待機する最大時間になる
unit - keepAliveTime 引数の時間単位
workQueue - タスクを実行する前に、タスク保持に使用するキュー。このキューは、execute メソッドにより送信された Runnable タスクだけを保持する
handler - スレッドが制限に達するか、キューが容量に達したために実行がブロックされた場合に使用するハンドラ
例外:
IllegalArgumentException - corePoolSize または keepAliveTime がゼロ未満の場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize より大きい場合
NullPointerException - workQueue または handler が null の場合

ThreadPoolExecutor

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)
指定された初期パラメータを使用して、新しい ThreadPoolExecutor を作成します。

パラメータ:
corePoolSize - プール内に保持するスレッドの数 (アイドル状態のスレッドも含む)
maximumPoolSize - プールで許可されるスレッドの最大数
keepAliveTime - スレッドの数がコアよりも多い場合、これは、超過したアイドル状態のスレッドが終了前に新規タスクを待機する最大時間になる
unit - keepAliveTime 引数の時間単位
workQueue - タスクを実行する前に、タスク保持に使用するキュー。このキューは、execute メソッドにより送信された Runnable タスクだけを保持する
threadFactory - executor が新規スレッドを作成する際に使用するファクトリ
handler - スレッドが制限に達するか、キューが容量に達したために実行がブロックされた場合に使用するハンドラ
例外:
IllegalArgumentException - corePoolSize または keepAliveTime がゼロ未満の場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize より大きい場合
NullPointerException - workQueuethreadFactory、または handler が null の場合
メソッドの詳細

execute

public void execute(Runnable command)
指定されたタスクを将来のいつか実行します。このタスクは、新規スレッドで実行されることも、プールされた既存のスレッドで実行されることもあります。 この executor がシャットダウンしているか、容量がいっぱいになったためにタスクを実行用に送信できない場合、タスクは現在の RejectedExecutionHandler により処理されます。

パラメータ:
command - 実行するタスク
例外:
RejectedExecutionException - タスクを実行用に受け入れることができない場合、RejectedExecutionHandler の判断でスローされる
NullPointerException - コマンドが null の場合

shutdown

public void shutdown()
順序に従って実行されるシャットダウンを開始します。以前に送信されたタスクが実行されますが、新規タスクは受け入れられません。シャットダウン後に呼び出しを実行しても、効果はありません。

例外:
SecurityException - セキュリティマネージャが存在する状況でシャットダウンを実行すると、この ExecutorService が呼び出し側には変更を許可されないスレッドを操作できる場合。これは、RuntimePermission("modifyThread") を保持しないか、セキュリティマネージャの checkAccess メソッドがアクセスを拒否するためである

shutdownNow

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

この実装は Thread.interrupt() を介してタスクを取り消します。このため、いずれかのタスクがマスクを実行するか、割り込みへの応答に失敗すると、そのタスクが決して終了しなくなる可能性があります。

戻り値:
実行が開始されなかったタスクのリスト
例外:
SecurityException - セキュリティマネージャが存在する状況でシャットダウンを実行すると、この ExecutorService が呼び出し側には変更を許可されないスレッドを操作できる場合。これは、RuntimePermission("modifyThread") を保持しないか、セキュリティマネージャの checkAccess メソッドがアクセスを拒否するためである

isShutdown

public boolean isShutdown()
インタフェース ExecutorService の記述:
この executorがシャットダウンした場合、true を返します。

戻り値:
この executorがシャットダウンした場合は true

isTerminating

public boolean isTerminating()
shutdown または shutdownNow 後にこの executor が終了処理を実行中であるが、完全に終了していない場合、true を返します。このメソッドは、デバッグで有用な場合があります。シャットダウン後、十分な時間が経過してから true が返された場合、送信されたタスクが割り込みを無視したか抑制したために、この executor が適正に終了していない可能性があります。

戻り値:
終了中であるが、完了していない場合は true

isTerminated

public boolean isTerminated()
インタフェース ExecutorService の記述:
シャットダウンに続いてすべてのタスクが完了した場合に、true を返します。shutdown または shutdownNow が最初に呼び出されないかぎり、isTerminated は決して true にはなりません。

戻り値:
シャットダウンに続いてすべてのタスクが完了した場合に true

awaitTermination

public boolean awaitTermination(long timeout,
                                TimeUnit unit)
                         throws InterruptedException
インタフェース ExecutorService の記述:
シャットダウン要求後にすべてのタスクが実行を完了する、タイムアウトが発生する、現在のスレッドで割り込みが発生する、のどれかが最初に起きるまでブロックします。

パラメータ:
timeout - 待機する最長時間
unit - timeout 引数の時間単位
戻り値:
この executor が終了する場合は true、終了前にタイムアウトが経過した場合は false
例外:
InterruptedException - 待機中に割り込みが発生した場合

finalize

protected void finalize()
この executor が参照されることがなくなった場合に、shutdown を呼び出します。

オーバーライド:
クラス Object 内の finalize

setThreadFactory

public void setThreadFactory(ThreadFactory threadFactory)
新規スレッドの作成に使用するスレッドファクトリを設定します。

パラメータ:
threadFactory - 新規スレッドファクトリ
例外:
NullPointerException - threadFactory が null の場合
関連項目:
getThreadFactory()

getThreadFactory

public ThreadFactory getThreadFactory()
新規スレッドの作成に使用するスレッドファクトリを返します。

戻り値:
現在のスレッドファクトリ
関連項目:
setThreadFactory(java.util.concurrent.ThreadFactory)

setRejectedExecutionHandler

public void setRejectedExecutionHandler(RejectedExecutionHandler handler)
実行不可能なタスク用の新規ハンドラを設定します。

パラメータ:
handler - 新規ハンドラ
例外:
NullPointerException - ハンドラが null の場合
関連項目:
getRejectedExecutionHandler()

getRejectedExecutionHandler

public RejectedExecutionHandler getRejectedExecutionHandler()
実行不可能なタスク用の現在のハンドラを返します。

戻り値:
現在のハンドラ
関連項目:
setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler)

getQueue

public BlockingQueue<Runnable> getQueue()
この executor が使用するタスクキューを返します。タスクキューへのアクセスは、主にデバッグおよび監視で使用します。このキューはアクティブに使用されている可能性があります。タスクキューの取得により、キューに入れられたタスクの実行が妨げられることはありません。

戻り値:
タスクキュー

remove

public boolean remove(Runnable task)
このタスクが存在する場合、executor の内部キューから削除し、まだ起動していないなら実行されないようにします。

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

パラメータ:
task - 削除するタスク
戻り値:
タスクが削除された場合は true

purge

public void purge()
作業キューから取り消された Future タスクすべての削除を試みます。このメソッドは、機能に他の影響を及ぼすことのない記憶領域の再生操作に役立ちます。取り消されたタスクは決して実行されませんが、ワーカスレッドがこれらをアクティブに削除できるようになるまで作業キューに蓄積されます。このメソッドを呼び出すと、それらの削除をただちに試みます。ただし、他のスレッドからの干渉が存在する場合、このメソッドはタスクの削除に失敗する可能性があります。


setCorePoolSize

public void setCorePoolSize(int corePoolSize)
スレッドのコア数を設定します。これは、コンストラクタで設定された値をすべてオーバーライドします。新しい値が現在の値よりも小さい場合、超過している既存のスレッドはアイドル状態になると終了します。新しい値が現在の値よりも大きい場合、必要に応じて新しいスレッドが開始され、キューに入れられたすべてのタスクが実行されます。

パラメータ:
corePoolSize - 新規コアサイズ
例外:
IllegalArgumentException - corePoolSize がゼロ未満の場合
関連項目:
getCorePoolSize()

getCorePoolSize

public int getCorePoolSize()
スレッドのコア数を返します。

戻り値:
スレッドのコア数
関連項目:
setCorePoolSize(int)

prestartCoreThread

public boolean prestartCoreThread()
コアスレッドを開始し、アイドル状態で待機させます。これは、新規タスクが実行される場合にのみ、コアスレッド開始のデフォルトポリシーをオーバーライドします。すべてのコアスレッドがすでに開始されている場合、このメソッドは、false を返します。

戻り値:
スレッドが開始されていた場合は true

prestartAllCoreThreads

public int prestartAllCoreThreads()
すべてのコアスレッドを開始し、アイドル状態で待機させます。これは、新規タスクの実行時にのみ、コアスレッド開始のデフォルトポリシーをオーバーライドします。

戻り値:
開始されたスレッドの数

setMaximumPoolSize

public void setMaximumPoolSize(int maximumPoolSize)
許可されるスレッドの最大数を設定します。これは、コンストラクタ内で設定されたすべての値をオーバーライドします。新しい値が現在の値よりも小さい場合、超過した既存のスレッドは、次にアイドル状態になると終了します。

パラメータ:
maximumPoolSize - 新しい最大値
例外:
IllegalArgumentException - maximumPoolSize がゼロ未満またはコアプールサイズの場合
関連項目:
getMaximumPoolSize()

getMaximumPoolSize

public int getMaximumPoolSize()
許可されるスレッドの最大数を返します。

戻り値:
許可されるスレッドの最大数
関連項目:
setMaximumPoolSize(int)

setKeepAliveTime

public void setKeepAliveTime(long time,
                             TimeUnit unit)
スレッドが終了する前にアイドル状態にとどまる制限時間を設定します。現在プール内にあるスレッドのコア数よりもスレッドが多い場合、この期間だけタスクを処理せずに待機したあとで、超過したスレッドが終了します。これは、コンストラクタで設定されたすべての値をオーバーライドします。

パラメータ:
time - 待機時間。時間値がゼロの場合、超過したスレッドはタスクの実行後ただちに終了する
unit - time 引数の時間単位
例外:
IllegalArgumentException - 時間がゼロ未満の場合
関連項目:
getKeepAliveTime(java.util.concurrent.TimeUnit)

getKeepAliveTime

public long getKeepAliveTime(TimeUnit unit)
スレッドのキープアライブ時間を返します。これは、コアプールサイズを超過したスレッドが終了する前にアイドル状態にとどまる期間です。

パラメータ:
unit - 期待される結果の時間単位
戻り値:
制限時間
関連項目:
setKeepAliveTime(long, java.util.concurrent.TimeUnit)

getPoolSize

public int getPoolSize()
プール内の現在のスレッド数を返します。

戻り値:
スレッドの数

getActiveCount

public int getActiveCount()
タスクをアクティブに実行中のスレッドの概数を返します。

戻り値:
スレッドの数

getLargestPoolSize

public int getLargestPoolSize()
これまで同時にプールに存在したスレッドの最大数を返します。

戻り値:
スレッドの数

getTaskCount

public long getTaskCount()
実行がスケジュールされたタスクのおおよその総数を返します。タスクおよびスレッドの状態は計算中に動的に変化する可能性があるため、返される値は概算に過ぎませんが、一連の呼び出しを通じて減少することはありません。

戻り値:
タスクの数

getCompletedTaskCount

public long getCompletedTaskCount()
実行が完了したタスクのおおよその総数を返します。タスクおよびスレッドの状態は計算中に動的に変化する可能性があるため、返される値は概算に過ぎませんが、一連の呼び出しを通じて減少することはありません。

戻り値:
タスクの数

beforeExecute

protected void beforeExecute(Thread t,
                             Runnable r)
指定されたスレッド内で、指定された Runnable の実行に先立って呼び出されるメソッド。このメソッドは、タスク r を実行するスレッド t により呼び出され、ThreadLocals の再初期化やログの実行に使用できます。注: 複数のオーバーライドを適正に入れ子にするため、通常、サブクラスはこのメソッドの最後に super.beforeExecute を呼び出す必要があります。

パラメータ:
t - タスク r を実行するスレッド
r - 実行されるタスク

afterExecute

protected void afterExecute(Runnable r,
                            Throwable t)
指定された Runnable の実行完了時に呼び出されるメソッド。このメソッドは、タスクを実行したスレッドにより呼び出されます。null 以外の場合、Throwable は実行を突然に終了させたキャッチされない例外です。注: 複数のオーバーライドを適切に入れ子にするため、通常、サブクラスはこのメソッドの最初で super.afterExecute を呼び出す必要があります。

パラメータ:
r - 完了した runnable
t - 終了の原因となった例外。実行が正常に完了した場合は null

terminated

protected void terminated()
Executor が終了したときに呼び出されるメソッド。デフォルト実装は、何も実行しません。注: 複数のオーバーライドを適正に入れ子にするため、通常、サブクラスはこのメソッド内で super.terminated を呼び出す必要があります。


JavaTM 2 Platform
Standard Ed. 5.0

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

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