public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator implements AsyncListenableTaskExecutor, SerializableSE
TaskExecutor
実装。"concurrencyLimit" Bean プロパティを通じて同時スレッドの制限をサポートします。デフォルトでは、同時スレッドの数は無制限です。
注: この実装はスレッドを再利用しません!スレッドプーリング TaskExecutor の実装を検討してください。特に、多数の短期間のタスクを実行する場合は考慮してください。
setConcurrencyLimit(int)
, SyncTaskExecutor
, ThreadPoolTaskExecutor
, WorkManagerTaskExecutor
, 直列化された形式 修飾子と型 | フィールドと説明 |
---|---|
static int | NO_CONCURRENCY 並行性を「オフ」に切り替える: つまり、同時呼び出しを許可しません。 |
static int | UNBOUNDED_CONCURRENCY 任意の数の同時呼び出しを許可します。つまり、同時実行を抑制しません。 |
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
コンストラクターと説明 |
---|
SimpleAsyncTaskExecutor() デフォルトのスレッド名プレフィックスを使用して、新しい SimpleAsyncTaskExecutor を作成します。 |
SimpleAsyncTaskExecutor(StringSE threadNamePrefix) 指定されたスレッド名プレフィックスで新しい SimpleAsyncTaskExecutor を作成します。 |
SimpleAsyncTaskExecutor(ThreadFactorySE threadFactory) 指定された外部スレッドファクトリで新しい SimpleAsyncTaskExecutor を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected void | doExecute(RunnableSE task) タスクを実際に実行するためのテンプレートメソッド。 |
void | execute(RunnableSE task) (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。 |
void | execute(RunnableSE task, long startTimeout) (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。 |
int | getConcurrencyLimit() 許可される並列アクセスの最大数を返します。 |
ThreadFactorySE | getThreadFactory() 新しいスレッドを作成するために使用する外部ファクトリがあれば、それを返します。 |
boolean | isThrottleActive() このスロットルが現在アクティブかどうかを返します。 |
void | setConcurrencyLimit(int concurrencyLimit) 許可される並列アクセスの最大数を設定します。 |
void | setTaskDecorator(TaskDecorator taskDecorator) 実行しようとしている Runnable SE に適用するカスタム TaskDecorator を指定します。 |
void | setThreadFactory(ThreadFactorySE threadFactory) この executor のローカルプロパティに依存する代わりに、新しいスレッドの作成に使用する外部ファクトリを指定します。 |
<T> FutureSE<T> | submit(CallableSE<T> task) Callable タスクを送信して実行し、そのタスクを表す Future を受け取ります。 |
FutureSE<?> | submit(RunnableSE task) 実行可能な Runnable タスクを送信し、そのタスクを表す Future を受け取ります。 |
<T> ListenableFuture<T> | submitListenable(CallableSE<T> task) Callable タスクを実行のために送信し、そのタスクを表す ListenableFuture を受け取ります。 |
ListenableFuture<?> | submitListenable(RunnableSE task) Runnable タスクを実行のために送信し、そのタスクを表す ListenableFuture を受け取ります。 |
createThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadNamePrefix, setThreadPriority
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final int UNBOUNDED_CONCURRENCY
public static final int NO_CONCURRENCY
public SimpleAsyncTaskExecutor()
public SimpleAsyncTaskExecutor(StringSE threadNamePrefix)
threadNamePrefix
- 新しく作成されたスレッドの名前に使用するプレフィックス public SimpleAsyncTaskExecutor(ThreadFactorySE threadFactory)
threadFactory
- 新しいスレッドの作成に使用するファクトリ public void setThreadFactory(@Nullable ThreadFactorySE threadFactory)
内部 ThreadFactory Bean を指定することも、JZN(Java EE 6 サーバー上)から取得した ThreadFactory 参照やその他のルックアップメカニズムを指定することもできます。
@Nullable public final ThreadFactorySE getThreadFactory()
public final void setTaskDecorator(TaskDecorator taskDecorator)
Runnable
SE に適用するカスタム TaskDecorator
を指定します。 このようなデコレータは、必ずしもユーザー提供の Runnable
/Callable
に適用されるのではなく、実際の実行コールバック(ユーザー提供のタスクのラッパーである可能性があります)に適用されることに注意してください。
主な使用例は、タスクの呼び出しの周囲に実行コンテキストを設定するか、タスク実行の監視 / 統計を提供することです。
注意 : TaskDecorator
実装での例外処理は、execute
呼び出しによる単純な Runnable
実行に制限されています。#submit
呼び出しの場合、公開された Runnable
は、例外を伝搬しない FutureTask
になります。例外を評価するには、キャストして Future#get
を呼び出す必要がある場合があります。
public void setConcurrencyLimit(int concurrencyLimit)
原則として、この制限は実行時に変更できますが、通常は構成時間の設定として設計されています。注: 実行時に -1 と具体的な制限を切り替えないでください。これにより、同時実行カウントの一貫性が失われます。-1 の制限は、同時実行カウントを完全にオフにします。
public final int getConcurrencyLimit()
public final boolean isThrottleActive()
true
getConcurrencyLimit()
, setConcurrencyLimit(int)
public void execute(RunnableSE task)
ExecutorSE
の executeSE
TaskExecutor
の execute
task
- 実行する Runnable
(非 null
)doExecute(Runnable)
public void execute(RunnableSE task, long startTimeout)
同時実行スロットル(アクティブな場合)をバイパスして、緊急タスク(「即時」タイムアウトで)を直接実行します。他のすべてのタスクはスロットルの影響を受けます。
AsyncTaskExecutor
の execute
task
- 実行する Runnable
(非 null
)startTimeout
- タスクが開始される予定の期間(ミリ秒)。これはエグゼキューターへのヒントとして意図されており、即時タスクの優先処理を可能にします。一般的な値は AsyncTaskExecutor.TIMEOUT_IMMEDIATE
または AsyncTaskExecutor.TIMEOUT_INDEFINITE
(TaskExecutor.execute(Runnable)
で使用されるデフォルト)です。AsyncTaskExecutor.TIMEOUT_IMMEDIATE
, doExecute(Runnable)
public FutureSE<?> submit(RunnableSE task)
AsyncTaskExecutor
null
の結果を返します。AsyncTaskExecutor
の submit
task
- 実行する Runnable
(非 null
)public <T> FutureSE<T> submit(CallableSE<T> task)
AsyncTaskExecutor
AsyncTaskExecutor
の submit
task
- 実行する Callable
(非 null
)public ListenableFuture<?> submitListenable(RunnableSE task)
AsyncListenableTaskExecutor
Runnable
タスクを実行のために送信し、そのタスクを表す ListenableFuture
を受け取ります。Future は完了時に null
の結果を返します。AsyncListenableTaskExecutor
の submitListenable
task
- 実行する Runnable
(非 null
)ListenableFuture
public <T> ListenableFuture<T> submitListenable(CallableSE<T> task)
AsyncListenableTaskExecutor
Callable
タスクを実行のために送信し、そのタスクを表す ListenableFuture
を受け取ります。Future は、完了時に Callable の結果を返します。AsyncListenableTaskExecutor
の submitListenable
task
- 実行する Callable
(非 null
)ListenableFuture
protected void doExecute(RunnableSE task)
デフォルトの実装では、新しいスレッドを作成して開始します。
task
- 実行する RunnablesetThreadFactory(java.util.concurrent.ThreadFactory)
, CustomizableThreadCreator.createThread(java.lang.Runnable)
, Thread.start()
SE