クラス SimpleAsyncTaskExecutor
- 実装されたすべてのインターフェース:
SerializableSE
、AutoCloseableSE
、ExecutorSE
、AsyncListenableTaskExecutor
、AsyncTaskExecutor
、TaskExecutor
- 既知の直属サブクラス
SimpleAsyncTaskScheduler
TaskExecutor
実装。JDK 21 で仮想スレッドオプションを提供します。 実行時の実行スレッドごとのタスク追跡オーバーヘッドを犠牲にして、setTaskTerminationTimeout(long)
による正常なシャットダウンをサポートします。setConcurrencyLimit(int)
による同時スレッドの制限をサポートします。デフォルトでは、タスクの同時実行数は無制限です。
注: この実装ではスレッドを再利用しません。特に多数の短期間のタスクを実行する場合は、代わりにスレッドプーリング TaskExecutor 実装を検討してください。あるいは、JDK 21 では、setVirtualThreads(boolean)
を true
に設定することを検討してください。
フィールドサマリー
修飾子と型フィールド説明static final int
並行性を「オフ」に切り替える: つまり、同時呼び出しを許可しません。static final int
任意の数の同時呼び出しを許可します。つまり、同時実行を抑制しません。インターフェース org.springframework.core.task.AsyncTaskExecutor から継承されたフィールド
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
コンストラクターのサマリー
コンストラクター説明デフォルトのスレッド名プレフィックスを使用して、新しい SimpleAsyncTaskExecutor を作成します。SimpleAsyncTaskExecutor
(StringSE threadNamePrefix) 指定されたスレッド名プレフィックスで新しい SimpleAsyncTaskExecutor を作成します。SimpleAsyncTaskExecutor
(ThreadFactorySE threadFactory) 指定された外部スレッドファクトリで新しい SimpleAsyncTaskExecutor を作成します。メソッドのサマリー
修飾子と型メソッド説明void
close()
この close メソッドは、具体的なtask termination timeout
が設定されている場合、アクティブなスレッドの終了を追跡します。protected void
doExecute
(RunnableSE task) タスクを実際に実行するためのテンプレートメソッド。void
execute
(RunnableSE task) (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。void
execute
(RunnableSE task, long startTimeout) 使用すべきではありません。final int
許可される並列タスク実行の最大数を返します。final ThreadFactorySE
新しいスレッドを作成するために使用する外部ファクトリがあれば、それを返します。boolean
isActive()
このエグゼキュータがまだアクティブであるかどうかを返します。final boolean
同時実行スロットルが現在アクティブかどうかを返します。protected ThreadSE
newThread
(RunnableSE task) 指定されたタスクの新しいスレッドを作成します。void
setConcurrencyLimit
(int concurrencyLimit) 許可されるタスクの並列実行の最大数を設定します。void
setTaskDecorator
(TaskDecorator taskDecorator) 実行しようとしているRunnable
SE に適用するカスタムTaskDecorator
を指定します。void
setTaskTerminationTimeout
(long timeout) このエグゼキューターを閉じるときのタスク終了のタイムアウト (ミリ秒) を指定します。void
setThreadFactory
(ThreadFactorySE threadFactory) この executor のローカルプロパティに依存する代わりに、新しいスレッドの作成に使用する外部ファクトリを指定します。void
setVirtualThreads
(boolean virtual) このエグゼキュータを仮想スレッドに切り替えます。FutureSE<?>
submit
(RunnableSE task) 実行可能な Runnable タスクを送信し、そのタスクを表す Future を受け取ります。<T> FutureSE<T>
submit
(CallableSE<T> task) Callable タスクを送信して実行し、そのタスクを表す Future を受け取ります。submitListenable
(RunnableSE task) Runnable
タスクを実行のために送信し、そのタスクを表すListenableFuture
を受け取ります。<T> ListenableFuture<T>
submitListenable
(CallableSE<T> task) Callable
タスクを実行のために送信し、そのタスクを表すListenableFuture
を受け取ります。クラス org.springframework.util.CustomizableThreadCreator から継承されたメソッド
createThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadNamePrefix, setThreadPriority
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.core.task.AsyncTaskExecutor から継承されたメソッド
submitCompletable, submitCompletable
フィールドの詳細
UNBOUNDED_CONCURRENCY
public static final int UNBOUNDED_CONCURRENCY任意の数の同時呼び出しを許可します。つまり、同時実行を抑制しません。NO_CONCURRENCY
public static final int NO_CONCURRENCY並行性を「オフ」に切り替える: つまり、同時呼び出しを許可しません。
コンストラクターの詳細
SimpleAsyncTaskExecutor
public SimpleAsyncTaskExecutor()デフォルトのスレッド名プレフィックスを使用して、新しい SimpleAsyncTaskExecutor を作成します。SimpleAsyncTaskExecutor
指定されたスレッド名プレフィックスで新しい SimpleAsyncTaskExecutor を作成します。- パラメーター:
threadNamePrefix
- 新しく作成されたスレッドの名前に使用するプレフィックス
SimpleAsyncTaskExecutor
指定された外部スレッドファクトリで新しい SimpleAsyncTaskExecutor を作成します。- パラメーター:
threadFactory
- 新しいスレッドの作成に使用するファクトリ
メソッドの詳細
setVirtualThreads
public void setVirtualThreads(boolean virtual) このエグゼキュータを仮想スレッドに切り替えます。Java 21 以上が必要です。デフォルトは
false
で、プラットフォームのスレッドを示します。代わりに仮想スレッドを作成するには、このフラグをtrue
に設定します。- 導入:
- 6.1
setThreadFactory
この executor のローカルプロパティに依存する代わりに、新しいスレッドの作成に使用する外部ファクトリを指定します。内部 ThreadFactory Bean を指定することも、JZN(Jakarta EE サーバー上)から取得した ThreadFactory 参照やその他のルックアップメカニズムを指定することもできます。
getThreadFactory
新しいスレッドを作成するために使用する外部ファクトリがあれば、それを返します。setTaskDecorator
実行しようとしているRunnable
SE に適用するカスタムTaskDecorator
を指定します。このようなデコレータは、必ずしもユーザー提供の
Runnable
/Callable
に適用されるのではなく、実際の実行コールバック(ユーザー提供のタスクのラッパーである可能性があります)に適用されることに注意してください。主な使用例は、タスクの呼び出しの周囲に実行コンテキストを設定するか、タスク実行の監視 / 統計を提供することです。
注意 :
TaskDecorator
実装での例外処理は、execute
呼び出しによる単純なRunnable
実行に制限されています。#submit
呼び出しの場合、公開されたRunnable
は、例外を伝搬しないFutureTask
になります。例外を評価するには、キャストしてFuture#get
を呼び出す必要がある場合があります。- 導入:
- 4.3
setTaskTerminationTimeout
public void setTaskTerminationTimeout(long timeout) このエグゼキューターを閉じるときのタスク終了のタイムアウト (ミリ秒) を指定します。デフォルトは 0 で、タスクの終了をまったく待機しません。ここで具体的に >0 のタイムアウトを指定すると、送信されたすべてのタスクがタスク追跡ランナブルにラップされ、タスクの数が多い場合にはかなりのオーバーヘッドが発生することに注意してください。ただし、実行時間が長いタスクを含む中程度のレベルの送信では、正常にシャットダウンするためにこれが可能です。
SimpleAsyncTaskExecutor
は調整されたライフサイクル停止には参加せず、close()
でのタスクの終了を待つだけであることに注意してください。- パラメーター:
timeout
- ミリ秒単位のタイムアウト- 導入:
- 6.1
- 関連事項:
setConcurrencyLimit
public void setConcurrencyLimit(int concurrencyLimit) 許可されるタスクの並列実行の最大数を設定します。デフォルトの -1 は、同時実行制限がまったくないことを示します。これはスレッドプールの最大プールサイズに相当し、スレッド管理システムの一時的なオーバーロードを防ぎます。
getConcurrencyLimit
public final int getConcurrencyLimit()許可される並列タスク実行の最大数を返します。isThrottleActive
public final boolean isThrottleActive()同時実行スロットルが現在アクティブかどうかを返します。- 戻り値:
- このインスタンスの同時実行制限がアクティブな場合、
true
- 関連事項:
isActive
public boolean isActive()このエグゼキュータがまだアクティブであるかどうか、つまりまだ閉じられていないため、さらなるタスクの送信を受け入れるかどうかを返します。それ以外の場合は、タスク終了フェーズにあるか、すでに完全にシャットダウンされています。- 導入:
- 6.1
- 関連事項:
execute
(スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。- 次で指定:
- インターフェース
ExecutorSE
のexecuteSE
- 次で指定:
- インターフェース
TaskExecutor
のexecute
- パラメーター:
task
- 実行するRunnable
(非null
)- 関連事項:
execute
使用すべきではありません。(スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。同時実行スロットル(アクティブな場合)をバイパスして、緊急タスク(「即時」タイムアウトで)を直接実行します。他のすべてのタスクはスロットルの影響を受けます。
- 次で指定:
- インターフェース
AsyncTaskExecutor
のexecute
- パラメーター:
task
- 実行するRunnable
(非null
)startTimeout
- タスクが開始される予定の期間(ミリ秒)。これはエグゼキューターへのヒントとして意図されており、即時タスクの優先処理を可能にします。一般的な値はAsyncTaskExecutor.TIMEOUT_IMMEDIATE
またはAsyncTaskExecutor.TIMEOUT_INDEFINITE
(TaskExecutor.execute(Runnable)
で使用されるデフォルト)です。- 関連事項:
submit
インターフェースからコピーされた説明:AsyncTaskExecutor
実行可能な Runnable タスクを送信し、そのタスクを表す Future を受け取ります。Future は完了時にnull
の結果を返します。6.1 では、このメソッドには
TaskExecutor.execute(Runnable)
に委譲するデフォルトの実装が付属しています。- 次で指定:
- インターフェース
AsyncTaskExecutor
のsubmit
- パラメーター:
task
- 実行するRunnable
(非null
)- 戻り値:
- タスクの保留中の完了を表す Future
submit
インターフェースからコピーされた説明:AsyncTaskExecutor
Callable タスクを送信して実行し、そのタスクを表す Future を受け取ります。Future は、完了時に Callable の結果を返します。6.1 では、このメソッドには
TaskExecutor.execute(Runnable)
に委譲するデフォルトの実装が付属しています。- 次で指定:
- インターフェース
AsyncTaskExecutor
のsubmit
- パラメーター:
task
- 実行するCallable
(非null
)- 戻り値:
- タスクの保留中の完了を表す Future
submitListenable
インターフェースからコピーされた説明:AsyncListenableTaskExecutor
Runnable
タスクを実行のために送信し、そのタスクを表すListenableFuture
を受け取ります。Future は完了時にnull
の結果を返します。- 次で指定:
- インターフェース
AsyncListenableTaskExecutor
のsubmitListenable
- パラメーター:
task
- 実行するRunnable
(非null
)- 戻り値:
- 保留中のタスクの完了を表す
ListenableFuture
submitListenable
インターフェースからコピーされた説明:AsyncListenableTaskExecutor
Callable
タスクを実行のために送信し、そのタスクを表すListenableFuture
を受け取ります。Future は、完了時に Callable の結果を返します。- 次で指定:
- インターフェース
AsyncListenableTaskExecutor
のsubmitListenable
- パラメーター:
task
- 実行するCallable
(非null
)- 戻り値:
- 保留中のタスクの完了を表す
ListenableFuture
doExecute
タスクを実際に実行するためのテンプレートメソッド。デフォルトの実装では、新しいスレッドを作成して開始します。
- パラメーター:
task
- 実行する Runnable- 関連事項:
newThread
指定されたタスクの新しいスレッドを作成します。- パラメーター:
task
- スレッドを作成するための Runnable- 戻り値:
- 新しいスレッドインスタンス
- 導入:
- 6.1
- 関連事項:
close
public void close()この close メソッドは、具体的なtask termination timeout
が設定されている場合、アクティブなスレッドの終了を追跡します。それ以外の場合、このエグゼキュータを閉じる必要はありません。- 次で指定:
- インターフェース
AutoCloseableSE
のclose
- 導入:
- 6.1