|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.concurrent.AbstractExecutorService java.util.concurrent.ThreadPoolExecutor
public class ThreadPoolExecutor
プールされた複数のスレッドの 1 つを使用して送信された各タスクを実行する ExecutorService
です。通常は Executors
ファクトリメソッドを使用して構成されます。
スレッドプールでは、2 つの問題に対処します。まず、タスクあたりの呼び出しオーバーヘッドが減少するため、通常は大量の非同期タスクの実行時にパフォーマンスが向上します。また、タスクのコレクションを実行するときに消費されるリソース (スレッドを含む) の境界設定および管理のための方法を提供します。各 ThreadPoolExecutor も基本的な統計情報 (完了したタスクの数など) を保持します。
幅広いコンテキストで有用であるために、このクラスでは多くの調整可能なパラメータや拡張性フックを提供します。ただしプログラマは、より便利な Executors
ファクトリメソッドである Executors.newCachedThreadPool()
(自動スレッド再生のあるアンバウンド形式のスレッドプール)、Executors.newFixedThreadPool(int)
(固定サイズのスレッドプール)、および Executors.newSingleThreadExecutor()
(単一バックグラウンドのスレッド) を使用してください。これらのファクトリメソッドは、もっとも一般的な使用を想定した設定を事前設定します。そうでない場合、このクラスを手動で設定し調整するときは次のガイドに従ってください。
getCorePoolSize()
を参照) と maximumPoolSize (getMaximumPoolSize()
を参照) で設定された境界に従って、ThreadPoolExecutor は自動的にプールサイズを調整します (getPoolSize()
を参照)。新しいタスクが execute(java.lang.Runnable)
メソッドで送信され、corePoolSize よりも少ない数のスレッドが実行中である場合は、その他のワークスレッドがアイドル状態であっても、要求を処理するために新しいスレッドが作成されます。corePoolSize よりも多く、maximumPoolSize よりも少ない数のスレッドが実行中である場合、新しいスレッドが作成されるのはキューがいっぱいである場合だけです。corePoolSize と maximumPoolSize を同じ値に設定すると、固定サイズのスレッドプールが作成されます。maximumPoolSize を Integer.MAX_VALUE などの実質的にアンバウンド形式である値に設定すると、プールに任意の数の並行タスクを格納することができます。コアプールサイズと最大プールサイズは構築時にのみ設定されるのがもっとも一般的ですが、setCorePoolSize(int)
および setMaximumPoolSize(int)
を使用して動的に変更することもできます。 prestartCoreThread()
または prestartAllCoreThreads()
メソッドを使用して動的にオーバーライドできます。空でないキューでプールを構築する場合は、スレッドを事前に起動することもできます。 ThreadFactory
を使用して作成されます。特に指定がない場合は、Executors.defaultThreadFactory()
が使用されます。この場合に作成されるスレッドは、すべて同じ ThreadGroup
内にあり、同じ NORM_PRIORITY 優先順位と非デーモン状態を持ちます。異なる ThreadFactory を指定すると、スレッドの名前、スレッドグループ、優先順位、デーモン状態などを変更できます。要求時に newThread から null が返されて ThreadFactory がスレッドの作成に失敗すると、executor は続行しますが、タスクをまったく実行できない可能性があります。 getKeepAliveTime(java.util.concurrent.TimeUnit)
を参照)。これにより、プールがアクティブに使用されていないときのリソースの消費量を減らすことができます。プールがあとでアクティブになると、新しいスレッドが構築されます。このパラメータは、setKeepAliveTime(long, java.util.concurrent.TimeUnit)
メソッドを使用して動的に変更できます。Long.MAX_VALUE TimeUnit.NANOSECONDS
の値を使用すると、アイドルスレッドがシャットダウン前に終了することも実質的に無効になります。デフォルトでは、corePoolSizeThreads を越える場合にのみキープアライブポリシーを適用します。ただし keepAliveTime の値がゼロ以外であれば、allowCoreThreadTimeOut(boolean)
メソッドを使用して、このタイムアウトポリシーをコアスレッドにも適用することができます。 BlockingQueue
は、送信されたタスクを転送および保持するために使用できます。このキューの使用は、プールのサイズ設定と相互に作用します。
SynchronousQueue
です。SynchronousQueue
は、本来はタスクを保持します。この場合、タスクを実行するためにすぐに利用できるスレッドがないと、タスクをキューに入れようとしたときに失敗し、新しいスレッドが構築されます。このポリシーにより、内部的な依存関係を持つ可能性がある要求セットの処理時にロックアップが回避されます。一般に直接ハンドオフでは、送信された新しいタスクが拒否されるのを回避するために、アンバウンド形式の maximumPoolSizes が必要です。これにより、平均して処理能力を超える速さでコマンドが次々に到着すると、アンバウンド形式のスレッドが大きくなる可能性があります。 LinkedBlockingQueue
など) を使用すると、corePoolSize のすべてのスレッドがビジー状態である場合に、新しいタスクはキュー内で待機します。これにより、corePoolSize を越えるスレッドは作成されなくなります。つまり maximumPoolSize の値は効果がなくなります。各タスクが完全に独立しているため、タスクが相互の実行に影響しない場合はこの方式が適切であることがあります (Web ページサーバーの場合など)。この方式のキューイングは、一時的に急増した要求を処理する場合などは便利ですが、平均して処理能力を超える速さでコマンドが次々に到着すると、アンバウンド形式のワークキューが大きくなる可能性があります。 ArrayBlockingQueue
など) は、限定された maximumPoolSizes で使用するとリソース不足を回避できますが、調整と制御が難しくなる可能性があります。キューサイズと最大プールサイズは互いにトレードオフの関係になることがあります。大きなキューと小さなプールを使用すると、CPU 使用率、OS リソース量、およびコンテキストスイッチングのオーバーヘッドは最小化されますが、スループットは大幅に低下する可能性があります。タスクが頻繁にブロックする場合は (入出力が制限される場合など)、許可しているスレッド数よりも多くのスレッドに対して、システムが時間をスケジュールすることができます。小さいキューを使用すると、一般に必要なプールサイズは大きくなります。これにより、CPU がよりビジーになりますが、過大なスケジュール設定のオーバーヘッドが発生することがあり、スループットも低下します。 execute(java.lang.Runnable)
メソッドで送信された新しいタスクは拒否されます。どちらの場合も、execute メソッドは、RejectedExecutionHandler
の RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor)
メソッドを呼び出します。事前定義された 4 つのハンドラポリシーが用意されています。
ThreadPoolExecutor.AbortPolicy
では、拒否されると、ハンドラは実行時の RejectedExecutionException
をスローします。 ThreadPoolExecutor.CallerRunsPolicy
では、execute 自体を呼び出すスレッドがタスクを実行します。これにより、単純なフィードバック制御機構が提供され、結果として新しいタスクの送信レートが低下します。 ThreadPoolExecutor.DiscardPolicy
では、実行できないタスクが単に削除されます。 ThreadPoolExecutor.DiscardOldestPolicy
では、executor がシャットダウンしていない場合は、ワークキューの先頭にあるタスクが削除され、実行が再試行されます (もう一度失敗する可能性があり、その場合はこの処理が繰り返される)。 RejectedExecutionHandler
クラスを定義および使用することもできます。その場合、特定の容量またはキューイングポリシーでのみ動作するようにポリシーが設計されているときは、特に注意が必要です。 beforeExecute(java.lang.Thread, java.lang.Runnable)
メソッドと afterExecute(java.lang.Runnable, java.lang.Throwable)
メソッドを提供しています。これらのメソッドは、各タスクを実行する前後に呼び出されます。これらのメソッドは、実行環境を操作するために使用できます (ThreadLocal の再初期化、統計情報の収集、ログエントリの追加など)。また、executor が完全に終了したら実行する必要のある特別な処理を実行するように、terminated()
メソッドをオーバーライドすることができます。
フックまたはコールバックメソッドが例外をスローすると、内部のワークスレッドは失敗して強制終了します。
getQueue()
メソッドを使用すると、監視やデバッグの目的でワークキューにアクセスできます。その他の目的でこのメソッドを使用しないことが強く推奨されています。提供される 2 つのメソッド remove(java.lang.Runnable)
および purge()
は、キューに入っている大量のタスクが取り消されるときに、記憶領域の再生を支援するために利用できます。shutdown()
の呼び出しを忘れたときでも、参照されていないプールが再生されるようにする場合は、未使用のスレッドが最終的に終了するように設定する必要があります。それには、適切なキープアライブ時間を設定したり、ゼロコアスレッドの下限を使用したり、allowCoreThreadTimeOut(boolean)
を設定したりします。 拡張機能の例。このクラスのほとんどの拡張機能は、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(); } } }
入れ子のクラスの概要 | |
---|---|
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 の実行完了時に呼び出されるメソッドです。 |
void |
allowCoreThreadTimeOut(boolean value)
このプールで、キープアライブ時間内に到着したタスクがなければコアスレッドがタイムアウトおよび終了することが許可され、新しいタスクが到着したときは必要に応じてコアスレッドが置き換えられるかどうかを制御するポリシーを設定します。 |
boolean |
allowsCoreThreadTimeOut()
このプールで、keepAlive 時間内に到着したタスクがなければコアスレッドがタイムアウトおよび終了することが許可され、新しいタスクが到着したときは必要に応じてコアスレッドが置き換えられる場合は、true を返します。 |
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, newTaskFor, newTaskFor, submit, submit, submit |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)
Executors
ファクトリメソッドのいずれかを使用するほうが便利な場合があります。
corePoolSize
- アイドルであってもプール内に維持されるスレッドの数maximumPoolSize
- プール内で可能なスレッドの最大数keepAliveTime
- スレッドの数がコアよりも多い場合、これは超過したアイドル状態のスレッドが新しいタスクを待機してから終了するまでの最大時間unit
- keepAliveTime 引数の時間単位workQueue
- タスクが超過するまで保持するために使用するキュー。このキューは、execute メソッドで送信された Runnable タスクだけを保持する
IllegalArgumentException
- corePoolSize または keepAliveTime がゼロよりも小さい場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize よりも大きい場合
NullPointerException
- workQueue が null の場合public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory)
corePoolSize
- アイドルであってもプール内に維持されるスレッドの数maximumPoolSize
- プール内で可能なスレッドの最大数keepAliveTime
- スレッドの数がコアよりも多い場合、これは超過したアイドル状態のスレッドが新しいタスクを待機してから終了するまでの最大時間unit
- keepAliveTime 引数の時間単位workQueue
- タスクが超過するまで保持するために使用するキュー。このキューは、execute メソッドで送信された Runnable タスクだけを保持するthreadFactory
- executor が新しいスレッドを作成するときに使用されるファクトリ
IllegalArgumentException
- corePoolSize または keepAliveTime がゼロよりも小さい場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize よりも大きい場合
NullPointerException
- workQueue または threadFactory が null の場合public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
corePoolSize
- アイドルであってもプール内に維持されるスレッドの数maximumPoolSize
- プール内で可能なスレッドの最大数keepAliveTime
- スレッドの数がコアよりも多い場合、これは超過したアイドル状態のスレッドが新しいタスクを待機してから終了するまでの最大時間unit
- keepAliveTime 引数の時間単位workQueue
- タスクが超過するまで保持するために使用するキュー。このキューは、execute メソッドで送信された Runnable タスクだけを保持するhandler
- スレッドの境界に達し、キューの容量に達したため、実行がブロックされたときに使用されるハンドラ
IllegalArgumentException
- corePoolSize または keepAliveTime がゼロよりも小さい場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize よりも大きい場合
NullPointerException
- workQueue または handler が null の場合public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize
- アイドルであってもプール内に維持されるスレッドの数maximumPoolSize
- プール内で可能なスレッドの最大数keepAliveTime
- スレッドの数がコアよりも多い場合、これは超過したアイドル状態のスレッドが新しいタスクを待機してから終了するまでの最大時間unit
- keepAliveTime 引数の時間単位workQueue
- タスクが超過するまで保持するために使用するキュー。このキューは、execute メソッドで送信された Runnable タスクだけを保持するthreadFactory
- executor が新しいスレッドを作成するときに使用されるファクトリhandler
- スレッドの境界に達し、キューの容量に達したため、実行がブロックされたときに使用されるハンドラ
IllegalArgumentException
- corePoolSize または keepAliveTime がゼロよりも小さい場合、maximumPoolSize がゼロ以下の場合、または corePoolSize が maximumPoolSize よりも大きい場合
NullPointerException
- workQueue、threadFactory、または handler が null の場合メソッドの詳細 |
---|
public void execute(Runnable command)
command
- 実行するタスク
RejectedExecutionException
- RejectedExecutionHandler の判断で、タスクの実行を受け入れることができない場合
NullPointerException
- コマンドが null の場合public void shutdown()
SecurityException
- セキュリティーマネージャーが存在する状況でこの ExecutorService のシャットダウンを実行すると、呼び出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread") を保持しないか、セキュリティーマネージャーの checkAccess メソッドがアクセスを拒否するためであるpublic List<Runnable> shutdownNow()
実行中のアクティブなタスク処理を停止するために最善の努力をすること以上の保証はありません。この実装では、Thread.interrupt()
を介してタスクを取り消すため、割り込みに対する応答に失敗したタスクは終了しなくなる可能性があります。
SecurityException
- セキュリティーマネージャーが存在する状況でこの ExecutorService のシャットダウンを実行すると、呼び出し側には変更を許可しないスレッドを操作できる場合。これは、RuntimePermission
("modifyThread") を保持しないか、セキュリティーマネージャーの checkAccess メソッドがアクセスを拒否するためであるpublic boolean isShutdown()
ExecutorService
の記述:
public boolean isTerminating()
public boolean isTerminated()
ExecutorService
の記述:
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
ExecutorService
の記述:
timeout
- 待機する最長時間unit
- timeout 引数の時間単位
InterruptedException
- 待機中に割り込みが発生した場合protected void finalize()
Object
内の finalize
public void setThreadFactory(ThreadFactory threadFactory)
threadFactory
- 新しいスレッドファクトリ
NullPointerException
- threadFactory が null の場合getThreadFactory()
public ThreadFactory getThreadFactory()
setThreadFactory(java.util.concurrent.ThreadFactory)
public void setRejectedExecutionHandler(RejectedExecutionHandler handler)
handler
- 新しいハンドラ
NullPointerException
- ハンドラが null の場合getRejectedExecutionHandler()
public RejectedExecutionHandler getRejectedExecutionHandler()
setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler)
public void setCorePoolSize(int corePoolSize)
corePoolSize
- 新しいコアサイズ
IllegalArgumentException
- corePoolSize がゼロより小さい場合getCorePoolSize()
public int getCorePoolSize()
setCorePoolSize(int)
public boolean prestartCoreThread()
public int prestartAllCoreThreads()
public boolean allowsCoreThreadTimeOut()
public void allowCoreThreadTimeOut(boolean value)
value
- タイムアウトする場合は true、そうでない場合は false
IllegalArgumentException
- 値が true で、現在のキープアライブ時間がゼロ以下の場合public void setMaximumPoolSize(int maximumPoolSize)
maximumPoolSize
- 新しい最大値
IllegalArgumentException
- 新しい最大値がゼロ以下の場合、または core pool size より小さい場合getMaximumPoolSize()
public int getMaximumPoolSize()
setMaximumPoolSize(int)
public void setKeepAliveTime(long time, TimeUnit unit)
time
- 待機する時間。time 値がゼロの場合は、タスクを実行するとすぐに超過したスレッドが終了するunit
- time 引数の時間単位
IllegalArgumentException
- time がゼロより小さい場合、または time がゼロで allowsCoreThreadTimeOut の場合getKeepAliveTime(java.util.concurrent.TimeUnit)
public long getKeepAliveTime(TimeUnit unit)
unit
- 戻り値に指定する時間単位
setKeepAliveTime(long, java.util.concurrent.TimeUnit)
public BlockingQueue<Runnable> getQueue()
public boolean remove(Runnable task)
このメソッドは取り消し方式の一部として便利なことがあります。内部キューに配置される前に別の形式に変換されたタスクは、削除に失敗する可能性があります。たとえば、submit を使用して入るタスクは、Future 状態を維持する形式に変換されることがあります。ただし、この場合は、purge()
メソッドを使用して、取り消された Future を削除することができます。
task
- 削除するタスク
public void purge()
Future
タスクをワークキューから削除しようとします。このメソッドは、機能にその他の影響のない、記憶領域の再生オペレーションとして便利なことがあります。取り消されたタスクが実行されることはありませんが、ワークスレッドがアクティブに削除するまでワークキュー内に蓄積される場合があります。このメソッドを呼び出すと、ただちに削除しようとします。ただし、その他のスレッドによる干渉が存在する場合は、このメソッドはタスクの削除に失敗することがあります。
public int getPoolSize()
public int getActiveCount()
public int getLargestPoolSize()
public long getTaskCount()
public long getCompletedTaskCount()
protected void beforeExecute(Thread t, Runnable r)
この実装は処理を行いませんが、サブクラスでカスタマイズすることは可能です。注:複数のオーバーライドを適切に入れ子にするため、通常は、サブクラスではこのメソッドの最後で super.beforeExecute を呼び出すようにしてください。
t
- タスク r を実行するスレッドr
- 実行されるタスクprotected void afterExecute(Runnable r, Throwable t)
注: アクションが明示的に、または submit などのメソッドによって、タスク (FutureTask
など) 内に収まる場合、これらのタスクオブジェクトは計算の例外をキャッチして維持します。そのため、異常終了することはなく、内部例外はこのメソッドに渡されません。
この実装は処理を行いませんが、サブクラスでカスタマイズすることは可能です。注:複数のオーバーライドを適切に入れ子にするため、通常、サブクラスではこのメソッドの最初で super.afterExecute を呼び出すようにしてください。
r
- 完了した Runnablet
- 終了の原因となった例外、または実行が正常に完了した場合は nullprotected void terminated()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。