クラス SimpleAsyncTaskScheduler
- 実装されたすべてのインターフェース:
SerializableSE
、AutoCloseableSE
、ExecutorSE
、EventListenerSE
、Aware
、ApplicationContextAware
、ApplicationListener<ContextClosedEvent>
、Lifecycle
、Phased
、SmartLifecycle
、AsyncListenableTaskExecutor
、AsyncTaskExecutor
、TaskExecutor
、TaskScheduler
TaskScheduler
インターフェースの単純な実装。単一のスケジューラスレッドを使用し、スケジュールされたすべてのタスクを個別のスレッドで実行します。これは、setVirtualThreads(true)
での一般的な使用を想定しており、JDK 21 の仮想スレッドでは魅力的な選択肢です。注意: 固定遅延でスケジュールすると、従来の固定遅延セマンティクスを提供するために、単一のスケジューラスレッドでの実行が強制されます。代わりに、このスレッドごとのタスクスケジューラバリアントにより適した固定レートまたは cron トリガーの使用を推奨します。
実行時の実行スレッドごとのタスク追跡オーバーヘッドを犠牲にして、SimpleAsyncTaskExecutor.setTaskTerminationTimeout(long)
による正常なシャットダウンをサポートします。SimpleAsyncTaskExecutor.setConcurrencyLimit(int)
による同時スレッドの制限をサポートします。デフォルトでは、タスクの同時実行数は無制限です。これにより、固定プールサイズを必要とする ThreadPoolTaskScheduler
とは対照的に、スケジュールされたタスク実行の動的な同時実行が可能になります。
注: この実装ではスレッドを再利用しません。特に多数の短期間のタスクをスケジュールする場合は、代わりにスレッドプーリング TaskScheduler 実装を検討してください。あるいは、JDK 21 では、SimpleAsyncTaskExecutor.setVirtualThreads(boolean)
を true
に設定することを検討してください。
SimpleAsyncTaskExecutor
を拡張し、完全な代替として使用できます。たとえば、TaskExecutor
としても TaskScheduler
としても機能する単一の共有インスタンスとして使用できます。これは通常、スケジューラスレッドプールに特定の制約がある傾向のある他のエグゼキュータ / スケジューラ実装には当てはまりません。そのため、実際には一般的なエグゼキュータの目的のために別のスレッドプールが必要になります。
注: このスケジューラバリアントは、タスクの実際の完了を追跡するのではなく、実行スレッドへのハンドオフのみを追跡します。その結果、ScheduledFuture
SE ハンドル (たとえば、schedule(Runnable, Instant)
から) は、提供されたタスク (または一連の繰り返しタスク) の実際の完了ではなく、そのハンドオフを表します。また、このスケジューラは、限られた範囲でのみライフサイクル管理に参加し、トリガーの起動と固定遅延タスクの実行を停止しますが、ハンドオフされたタスクの実行は停止しません。
組み込みのタスクごとのスレッド機能の代替として、このスケジューラは、setTargetTaskExecutor(java.util.concurrent.Executor)
を介してスケジュールされたタスク実行用の別のターゲットエグゼキュータを使用して構成することもできます。たとえば、共有 ThreadPoolTaskExecutor
Bean を指します。これは、共有同時実行制限に参加している動的なコア / 最大プールサイズ範囲を持つ可能性のあるターゲットスレッドプールに動的にディスパッチしながら、常に単一のスケジューラスレッドを使用するため、ThreadPoolTaskScheduler
セットアップとはかなり異なります。
フィールドサマリー
クラス org.springframework.core.task.SimpleAsyncTaskExecutor から継承されたフィールド
NO_CONCURRENCY, UNBOUNDED_CONCURRENCY
インターフェース org.springframework.core.task.AsyncTaskExecutor から継承されたフィールド
TIMEOUT_IMMEDIATE, TIMEOUT_INDEFINITE
コンストラクターのサマリー
方法の概要
修飾子と型メソッド説明void
close()
この close メソッドは、具体的なtask termination timeout
が設定されている場合、アクティブなスレッドの終了を追跡します。protected void
doExecute
(RunnableSE task) タスクを実際に実行するためのテンプレートメソッド。void
execute
(RunnableSE task) (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。getClock()
スケジューリングの目的で使用する監視を返します。int
getPhase()
このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。boolean
このコンポーネントが現在実行されているかどうかを確認します。void
アプリケーションイベントを処理します。schedule
(RunnableSE task, InstantSE startTime) 指定されたRunnable
SE をスケジュールし、指定された実行時間に呼び出します。schedule
(RunnableSE task, Trigger trigger) 指定されたRunnable
SE をスケジュールし、トリガーが次の実行時間を示すたびに呼び出します。scheduleAtFixedRate
(RunnableSE task, DurationSE period) 指定されたRunnable
SE をスケジュールします。できるだけ早く開始し、指定された期間で呼び出します。scheduleAtFixedRate
(RunnableSE task, InstantSE startTime, DurationSE period) 指定されたRunnable
SE をスケジュールし、指定された実行時間に呼び出し、その後、指定された期間で呼び出します。scheduleWithFixedDelay
(RunnableSE task, DurationSE delay) 指定されたRunnable
SE をスケジュールします。できるだけ早く開始し、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。scheduleWithFixedDelay
(RunnableSE task, InstantSE startTime, DurationSE delay) 指定されたRunnable
SE をスケジュールし、指定された実行時間に呼び出し、その後、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。void
setApplicationContext
(ApplicationContext applicationContext) このオブジェクトが実行される ApplicationContext を設定します。void
スケジューリングの目的で使用する監視を設定します。void
setErrorHandler
(ErrorHandler errorHandler) ErrorHandler
戦略を提供します。void
setPhase
(int phase) このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。void
setTargetTaskExecutor
(ExecutorSE targetTaskExecutor) スケジュールされたタスクの個別の実行を委譲するカスタムターゲットExecutor
SE を指定します。void
start()
このコンポーネントを起動します。void
stop()
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。void
stop
(RunnableSE callback) Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。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.core.task.SimpleAsyncTaskExecutor から継承されたメソッド
execute, getConcurrencyLimit, getThreadFactory, isActive, isThrottleActive, newThread, setConcurrencyLimit, setTaskDecorator, setTaskTerminationTimeout, setThreadFactory, setVirtualThreads
クラス 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.context.ApplicationListener から継承されたメソッド
supportsAsyncExecution
インターフェース org.springframework.core.task.AsyncTaskExecutor から継承されたメソッド
submitCompletable, submitCompletable
インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
isAutoStartup
インターフェース org.springframework.scheduling.TaskScheduler から継承されたメソッド
schedule, scheduleAtFixedRate, scheduleAtFixedRate, scheduleWithFixedDelay, scheduleWithFixedDelay
フィールドの詳細
DEFAULT_PHASE
public static final int DEFAULT_PHASE実行者SmartLifecycle
のデフォルトフェーズ:Integer.MAX_VALUE / 2
.
コンストラクターの詳細
SimpleAsyncTaskScheduler
public SimpleAsyncTaskScheduler()
メソッドの詳細
setErrorHandler
ErrorHandler
戦略を提供します。- 導入:
- 6.2
setClock
スケジューリングの目的で使用する監視を設定します。デフォルトのクロックは、デフォルトのタイムゾーンのシステムクロックです。
getClock
インターフェースからコピーされた説明:TaskScheduler
スケジューリングの目的で使用する監視を返します。- 次で指定:
- インターフェース
TaskScheduler
のgetClock
- 関連事項:
setPhase
public void setPhase(int phase) このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。デフォルトはDEFAULT_PHASE
です。getPhase
public int getPhase()このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。- 次で指定:
- インターフェース
Phased
のgetPhase
- 次で指定:
- インターフェース
SmartLifecycle
のgetPhase
- 関連事項:
setTargetTaskExecutor
スケジュールされたタスクの個別の実行を委譲するカスタムターゲットExecutor
SE を指定します。たとえば、このスケジューラは単一のスケジューラスレッドを使用し続ける一方で、スケジュールされたタスクを実行するために別のスレッドプールに設定できます。設定されていない場合、通常の
SimpleAsyncTaskExecutor
配置がタスクごとに新しいスレッドで開始されます。setApplicationContext
インターフェースからコピーされた説明:ApplicationContextAware
このオブジェクトが実行される ApplicationContext を設定します。通常、この呼び出しはオブジェクトの初期化に使用されます。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)
、ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)
およびMessageSourceAware
の後に呼び出されます(該当する場合)。- 次で指定:
- インターフェース
ApplicationContextAware
のsetApplicationContext
- パラメーター:
applicationContext
- このオブジェクトによって使用される ApplicationContext オブジェクト- 関連事項:
doExecute
クラスからコピーされた説明:SimpleAsyncTaskExecutor
タスクを実際に実行するためのテンプレートメソッド。デフォルトの実装では、新しいスレッドを作成して開始します。
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のdoExecute
- パラメーター:
task
- 実行する Runnable- 関連事項:
execute
クラスからコピーされた説明:SimpleAsyncTaskExecutor
(スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。- 次で指定:
- インターフェース
ExecutorSE
のexecuteSE
- 次で指定:
- インターフェース
TaskExecutor
のexecute
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のexecute
- パラメーター:
task
- 実行するRunnable
(非null
)- 関連事項:
submit
インターフェースからコピーされた説明:AsyncTaskExecutor
実行可能な Runnable タスクを送信し、そのタスクを表す Future を受け取ります。Future は完了時にnull
の結果を返します。6.1 では、このメソッドには
TaskExecutor.execute(Runnable)
に委譲するデフォルトの実装が付属しています。- 次で指定:
- インターフェース
AsyncTaskExecutor
のsubmit
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のsubmit
- パラメーター:
task
- 実行するRunnable
(非null
)- 戻り値:
- タスクの保留中の完了を表す Future
submit
インターフェースからコピーされた説明:AsyncTaskExecutor
Callable タスクを送信して実行し、そのタスクを表す Future を受け取ります。Future は、完了時に Callable の結果を返します。6.1 では、このメソッドには
TaskExecutor.execute(Runnable)
に委譲するデフォルトの実装が付属しています。- 次で指定:
- インターフェース
AsyncTaskExecutor
のsubmit
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のsubmit
- パラメーター:
task
- 実行するCallable
(非null
)- 戻り値:
- タスクの保留中の完了を表す Future
submitListenable
インターフェースからコピーされた説明:AsyncListenableTaskExecutor
Runnable
タスクを実行のために送信し、そのタスクを表すListenableFuture
を受け取ります。Future は完了時にnull
の結果を返します。- 次で指定:
- インターフェース
AsyncListenableTaskExecutor
のsubmitListenable
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のsubmitListenable
- パラメーター:
task
- 実行するRunnable
(非null
)- 戻り値:
- 保留中のタスクの完了を表す
ListenableFuture
submitListenable
インターフェースからコピーされた説明:AsyncListenableTaskExecutor
Callable
タスクを実行のために送信し、そのタスクを表すListenableFuture
を受け取ります。Future は、完了時に Callable の結果を返します。- 次で指定:
- インターフェース
AsyncListenableTaskExecutor
のsubmitListenable
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のsubmitListenable
- パラメーター:
task
- 実行するCallable
(非null
)- 戻り値:
- 保留中のタスクの完了を表す
ListenableFuture
schedule
インターフェースからコピーされた説明:TaskScheduler
指定されたRunnable
SE をスケジュールし、トリガーが次の実行時間を示すたびに呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFuture
SE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskScheduler
のschedule
- パラメーター:
task
- トリガーが起動するたびに実行する Runnabletrigger
-Trigger
インターフェースの実装、たとえば cron 式をラップするCronTrigger
オブジェクト- 戻り値:
- タスクの実行保留を表す
ScheduledFuture
SE、または指定されたトリガーオブジェクトが決して起動しない場合はnull
(つまり、Trigger.nextExecution(org.springframework.scheduling.TriggerContext)
からnull
を返します) - 関連事項:
schedule
インターフェースからコピーされた説明:TaskScheduler
指定されたRunnable
SE をスケジュールし、指定された実行時間に呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFuture
SE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskScheduler
のschedule
- パラメーター:
task
- トリガーが起動するたびに実行する RunnablestartTime
- タスクの望ましい実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)- 戻り値:
- タスクの保留中の実行を表す
ScheduledFuture
SE
scheduleAtFixedRate
public ScheduledFutureSE<?> scheduleAtFixedRate(RunnableSE task, InstantSE startTime, DurationSE period) インターフェースからコピーされた説明:TaskScheduler
指定されたRunnable
SE をスケジュールし、指定された実行時間に呼び出し、その後、指定された期間で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFuture
SE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskScheduler
のscheduleAtFixedRate
- パラメーター:
task
- トリガーが起動するたびに実行する RunnablestartTime
- タスクに必要な最初の実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)period
- タスクの連続した実行の間隔- 戻り値:
- タスクの保留中の実行を表す
ScheduledFuture
SE
scheduleAtFixedRate
インターフェースからコピーされた説明:TaskScheduler
指定されたRunnable
SE をスケジュールします。できるだけ早く開始し、指定された期間で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFuture
SE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskScheduler
のscheduleAtFixedRate
- パラメーター:
task
- トリガーが起動するたびに実行する Runnableperiod
- タスクの連続した実行の間隔- 戻り値:
- タスクの保留中の実行を表す
ScheduledFuture
SE
scheduleWithFixedDelay
public ScheduledFutureSE<?> scheduleWithFixedDelay(RunnableSE task, InstantSE startTime, DurationSE delay) インターフェースからコピーされた説明:TaskScheduler
指定されたRunnable
SE をスケジュールし、指定された実行時間に呼び出し、その後、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFuture
SE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskScheduler
のscheduleWithFixedDelay
- パラメーター:
task
- トリガーが起動するたびに実行する RunnablestartTime
- タスクに必要な最初の実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)delay
- ある実行の補完から次の実行の開始までの遅延- 戻り値:
- タスクの保留中の実行を表す
ScheduledFuture
SE
scheduleWithFixedDelay
インターフェースからコピーされた説明:TaskScheduler
指定されたRunnable
SE をスケジュールします。できるだけ早く開始し、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFuture
SE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskScheduler
のscheduleWithFixedDelay
- パラメーター:
task
- トリガーが起動するたびに実行する Runnabledelay
- ある実行の補完から次の実行の開始までの遅延- 戻り値:
- タスクの保留中の実行を表す
ScheduledFuture
SE
start
public void start()インターフェースからコピーされた説明:Lifecycle
このコンポーネントを起動します。コンポーネントがすでに実行されている場合は、例外をスローしないでください。
コンテナーの場合、これは適用されるすべてのコンポーネントに開始シグナルを伝播します。
stop
public void stop()インターフェースからコピーされた説明:Lifecycle
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。非同期停止動作が必要な場合は、SmartLifecycle
とそのstop(Runnable)
バリアントの実装を検討してください。この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、
Lifecycle
Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止シグナルを事前に考慮することなく呼び出されます。コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。
コンテナーの場合、これは停止シグナルを適用するすべてのコンポーネントに伝播します。
stop
インターフェースからコピーされた説明:SmartLifecycle
Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。提供されたコールバックは、
LifecycleProcessor
によって使用され、共通のシャットダウン順序値を持つすべてのコンポーネントの順序付けられた、潜在的に同時のシャットダウンをサポートします。コールバック は、SmartLifecycle
コンポーネントが実際に停止した後に実行する必要があります。LifecycleProcessor
は、stop
メソッドのこのバリアントのみを呼び出します。つまり、SmartLifecycle
実装では、このメソッドの実装内に明示的に委譲されない限り、Lifecycle.stop()
は呼び出されません。デフォルトの実装は
Lifecycle.stop()
に委譲し、呼び出しスレッドで指定されたコールバックをすぐにトリガーします。2 つの間に同期がないことに注意してください。カスタム実装では、少なくとも共通のライフサイクルモニター(存在する場合)内に同じ手順を入れたい場合があります。- 次で指定:
- インターフェース
SmartLifecycle
のstop
- 関連事項:
isRunning
public boolean isRunning()インターフェースからコピーされた説明:Lifecycle
このコンポーネントが現在実行されているかどうかを確認します。コンテナーの場合、これは、適用されるすべてのコンポーネントが現在実行されている場合にのみ、
true
を返します。onApplicationEvent
インターフェースからコピーされた説明:ApplicationListener
アプリケーションイベントを処理します。- 次で指定:
- インターフェース
ApplicationListener<ContextClosedEvent>
のonApplicationEvent
- パラメーター:
event
- 応答するイベント
close
public void close()クラスからコピーされた説明:SimpleAsyncTaskExecutor
この close メソッドは、具体的なtask termination timeout
が設定されている場合、アクティブなスレッドの終了を追跡します。それ以外の場合、このエグゼキュータを閉じる必要はありません。- 次で指定:
- インターフェース
AutoCloseableSE
のclose
- オーバーライド:
- クラス
SimpleAsyncTaskExecutor
のclose