クラス SimpleAsyncTaskExecutor

java.lang.ObjectSE
org.springframework.util.CustomizableThreadCreator
org.springframework.core.task.SimpleAsyncTaskExecutor
実装されたすべてのインターフェース:
SerializableSEAutoCloseableSEExecutorSEAsyncListenableTaskExecutorAsyncTaskExecutorTaskExecutor
既知の直属サブクラス
SimpleAsyncTaskScheduler

public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator implements AsyncListenableTaskExecutor, SerializableSE, AutoCloseableSE
タスクごとに新しいスレッドを起動し、非同期で実行する TaskExecutor 実装。JDK 21 で仮想スレッドオプションを提供します。

実行時の実行スレッドごとのタスク追跡オーバーヘッドを犠牲にして、setTaskTerminationTimeout(long) による正常なシャットダウンをサポートします。setConcurrencyLimit(int) による同時スレッドの制限をサポートします。デフォルトでは、タスクの同時実行数は無制限です。

注: この実装ではスレッドを再利用しません。特に多数の短期間のタスクを実行する場合は、代わりにスレッドプーリング TaskExecutor 実装を検討してください。あるいは、JDK 21 では、setVirtualThreads(boolean) を true に設定することを検討してください。

導入:
2.0
作成者:
Juergen Hoeller
関連事項:
  • フィールドの詳細

  • コンストラクターの詳細

    • SimpleAsyncTaskExecutor

      public SimpleAsyncTaskExecutor()
      デフォルトのスレッド名プレフィックスを使用して、新しい SimpleAsyncTaskExecutor を作成します。
    • SimpleAsyncTaskExecutor

      public SimpleAsyncTaskExecutor(StringSE threadNamePrefix)
      指定されたスレッド名プレフィックスで新しい SimpleAsyncTaskExecutor を作成します。
      パラメーター:
      threadNamePrefix - 新しく作成されたスレッドの名前に使用するプレフィックス
    • SimpleAsyncTaskExecutor

      public SimpleAsyncTaskExecutor(ThreadFactorySE threadFactory)
      指定された外部スレッドファクトリで新しい SimpleAsyncTaskExecutor を作成します。
      パラメーター:
      threadFactory - 新しいスレッドの作成に使用するファクトリ
  • メソッドの詳細

    • setVirtualThreads

      public void setVirtualThreads(boolean virtual)
      このエグゼキュータを仮想スレッドに切り替えます。Java 21 以上が必要です。

      デフォルトは false で、プラットフォームのスレッドを示します。代わりに仮想スレッドを作成するには、このフラグを true に設定します。

      導入:
      6.1
    • setThreadFactory

      public void setThreadFactory(@Nullable ThreadFactorySE threadFactory)
      この executor のローカルプロパティに依存する代わりに、新しいスレッドの作成に使用する外部ファクトリを指定します。

      内部 ThreadFactory Bean を指定することも、JZN(Jakarta EE サーバー上)から取得した ThreadFactory 参照やその他のルックアップメカニズムを指定することもできます。

      関連事項:
    • getThreadFactory

      @Nullable public final ThreadFactorySE getThreadFactory()
      新しいスレッドを作成するために使用する外部ファクトリがあれば、それを返します。
    • setTaskDecorator

      public void setTaskDecorator(TaskDecorator taskDecorator)
      実行しようとしている RunnableSE に適用するカスタム 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

      public void execute(RunnableSE task)
      (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。
      次で指定:
      インターフェース ExecutorSEexecuteSE 
      次で指定:
      インターフェース TaskExecutorexecute 
      パラメーター:
      task - 実行する Runnable (非 null)
      関連事項:
    • execute

      @DeprecatedSE public void execute(RunnableSE task, long startTimeout)
      使用すべきではありません。
      (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。

      同時実行スロットル(アクティブな場合)をバイパスして、緊急タスク(「即時」タイムアウトで)を直接実行します。他のすべてのタスクはスロットルの影響を受けます。

      次で指定:
      インターフェース AsyncTaskExecutorexecute 
      パラメーター:
      task - 実行する Runnable (非 null)
      startTimeout - タスクが開始される予定の期間(ミリ秒)。これはエグゼキューターへのヒントとして意図されており、即時タスクの優先処理を可能にします。一般的な値は AsyncTaskExecutor.TIMEOUT_IMMEDIATE または AsyncTaskExecutor.TIMEOUT_INDEFINITETaskExecutor.execute(Runnable) で使用されるデフォルト)です。
      関連事項:
    • submit

      public FutureSE<?> submit(RunnableSE task)
      インターフェースからコピーされた説明: AsyncTaskExecutor
      実行可能な Runnable タスクを送信し、そのタスクを表す Future を受け取ります。Future は完了時に null の結果を返します。

      6.1 では、このメソッドには TaskExecutor.execute(Runnable) に委譲するデフォルトの実装が付属しています。

      次で指定:
      インターフェース AsyncTaskExecutorsubmit 
      パラメーター:
      task - 実行する Runnable (非 null)
      戻り値:
      タスクの保留中の完了を表す Future
    • submit

      public <T> FutureSE<T> submit(CallableSE<T> task)
      インターフェースからコピーされた説明: AsyncTaskExecutor
      Callable タスクを送信して実行し、そのタスクを表す Future を受け取ります。Future は、完了時に Callable の結果を返します。

      6.1 では、このメソッドには TaskExecutor.execute(Runnable) に委譲するデフォルトの実装が付属しています。

      次で指定:
      インターフェース AsyncTaskExecutorsubmit 
      パラメーター:
      task - 実行する Callable (非 null)
      戻り値:
      タスクの保留中の完了を表す Future
    • submitListenable

      public ListenableFuture<?> submitListenable(RunnableSE task)
      インターフェースからコピーされた説明: AsyncListenableTaskExecutor
      Runnable タスクを実行のために送信し、そのタスクを表す ListenableFuture を受け取ります。Future は完了時に null の結果を返します。
      次で指定:
      インターフェース AsyncListenableTaskExecutorsubmitListenable 
      パラメーター:
      task - 実行する Runnable (非 null)
      戻り値:
      保留中のタスクの完了を表す ListenableFuture 
    • submitListenable

      public <T> ListenableFuture<T> submitListenable(CallableSE<T> task)
      インターフェースからコピーされた説明: AsyncListenableTaskExecutor
      Callable タスクを実行のために送信し、そのタスクを表す ListenableFuture を受け取ります。Future は、完了時に Callable の結果を返します。
      次で指定:
      インターフェース AsyncListenableTaskExecutorsubmitListenable 
      パラメーター:
      task - 実行する Callable (非 null)
      戻り値:
      保留中のタスクの完了を表す ListenableFuture 
    • doExecute

      protected void doExecute(RunnableSE task)
      タスクを実際に実行するためのテンプレートメソッド。

      デフォルトの実装では、新しいスレッドを作成して開始します。

      パラメーター:
      task - 実行する Runnable
      関連事項:
    • newThread

      protected ThreadSE newThread(RunnableSE task)
      指定されたタスクの新しいスレッドを作成します。
      パラメーター:
      task - スレッドを作成するための Runnable
      戻り値:
      新しいスレッドインスタンス
      導入:
      6.1
      関連事項:
    • close

      public void close()
      この close メソッドは、具体的な task termination timeout が設定されている場合、アクティブなスレッドの終了を追跡します。それ以外の場合、このエグゼキュータを閉じる必要はありません。
      次で指定:
      インターフェース AutoCloseableSEclose 
      導入:
      6.1