クラス 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 としても機能する単一の共有インスタンスとして使用できます。これは通常、スケジューラスレッドプールに特定の制約がある傾向のある他のエグゼキュータ / スケジューラ実装には当てはまりません。そのため、実際には一般的なエグゼキュータの目的のために別のスレッドプールが必要になります。
注: このスケジューラバリアントは、タスクの実際の完了を追跡するのではなく、実行スレッドへのハンドオフのみを追跡します。その結果、ScheduledFutureSE ハンドル (たとえば、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コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明voidclose()この close メソッドは、具体的なtask termination timeoutが設定されている場合、アクティブなスレッドの終了を追跡します。protected voiddoExecute(RunnableSE task) タスクを実際に実行するためのテンプレートメソッド。voidexecute(RunnableSE task) (スーパークラスの設定を介して)構成されている場合、同時実行スロットル内で、指定されたタスクを実行します。getClock()スケジューリングの目的で使用する監視を返します。intgetPhase()このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。booleanこのコンポーネントが現在実行されているかどうかを確認します。voidアプリケーションイベントを処理します。schedule(RunnableSE task, InstantSE startTime) 指定されたRunnableSE をスケジュールし、指定された実行時間に呼び出します。schedule(RunnableSE task, Trigger trigger) 指定されたRunnableSE をスケジュールし、トリガーが次の実行時間を示すたびに呼び出します。scheduleAtFixedRate(RunnableSE task, DurationSE period) 指定されたRunnableSE をスケジュールします。できるだけ早く開始し、指定された期間で呼び出します。scheduleAtFixedRate(RunnableSE task, InstantSE startTime, DurationSE period) 指定されたRunnableSE をスケジュールし、指定された実行時間に呼び出し、その後、指定された期間で呼び出します。scheduleWithFixedDelay(RunnableSE task, DurationSE delay) 指定されたRunnableSE をスケジュールします。できるだけ早く開始し、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。scheduleWithFixedDelay(RunnableSE task, InstantSE startTime, DurationSE delay) 指定されたRunnableSE をスケジュールし、指定された実行時間に呼び出し、その後、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。voidsetApplicationContext(ApplicationContext applicationContext) このオブジェクトが実行される ApplicationContext を設定します。voidスケジューリングの目的で使用する監視を設定します。voidsetErrorHandler(ErrorHandler errorHandler) ErrorHandler戦略を提供します。voidsetPhase(int phase) このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。voidsetTargetTaskExecutor(ExecutorSE targetTaskExecutor) スケジュールされたタスクの個別の実行を委譲するカスタムターゲットExecutorSE を指定します。voidstart()このコンポーネントを起動します。voidstop()このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。voidstop(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, setCancelRemainingTasksOnClose, setConcurrencyLimit, setRejectTasksWhenLimitReached, 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
スケジュールされたタスクの個別の実行を委譲するカスタムターゲットExecutorSE を指定します。たとえば、このスケジューラは単一のスケジューラスレッドを使用し続ける一方で、スケジュールされたタスクを実行するために別のスレッドプールに設定できます。設定されていない場合、通常の
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
インターフェースからコピーされた説明:AsyncTaskExecutorCallable タスクを送信して実行し、そのタスクを表す Future を受け取ります。Future は、完了時に Callable の結果を返します。6.1 では、このメソッドには
TaskExecutor.execute(Runnable)に委譲するデフォルトの実装が付属しています。- 次で指定:
- インターフェース
AsyncTaskExecutorのsubmit - オーバーライド:
- クラス
SimpleAsyncTaskExecutorのsubmit - パラメーター:
task- 実行するCallable(非null)- 戻り値:
- タスクの保留中の完了を表す Future
submitListenable
インターフェースからコピーされた説明:AsyncListenableTaskExecutorRunnableタスクを実行のために送信し、そのタスクを表すListenableFutureを受け取ります。Future は完了時にnullの結果を返します。- 次で指定:
- インターフェース
AsyncListenableTaskExecutorのsubmitListenable - オーバーライド:
- クラス
SimpleAsyncTaskExecutorのsubmitListenable - パラメーター:
task- 実行するRunnable(非null)- 戻り値:
- 保留中のタスクの完了を表す
ListenableFuture
submitListenable
インターフェースからコピーされた説明:AsyncListenableTaskExecutorCallableタスクを実行のために送信し、そのタスクを表すListenableFutureを受け取ります。Future は、完了時に Callable の結果を返します。- 次で指定:
- インターフェース
AsyncListenableTaskExecutorのsubmitListenable - オーバーライド:
- クラス
SimpleAsyncTaskExecutorのsubmitListenable - パラメーター:
task- 実行するCallable(非null)- 戻り値:
- 保留中のタスクの完了を表す
ListenableFuture
schedule
インターフェースからコピーされた説明:TaskScheduler指定されたRunnableSE をスケジュールし、トリガーが次の実行時間を示すたびに呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFutureSE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskSchedulerのschedule - パラメーター:
task- トリガーが起動するたびに実行する Runnabletrigger-Triggerインターフェースの実装、たとえば cron 式をラップするCronTriggerオブジェクト- 戻り値:
- タスクの実行保留を表す
ScheduledFutureSE、または指定されたトリガーオブジェクトが決して起動しない場合はnull(つまり、Trigger.nextExecution(org.springframework.scheduling.TriggerContext)からnullを返します) - 関連事項:
schedule
インターフェースからコピーされた説明:TaskScheduler指定されたRunnableSE をスケジュールし、指定された実行時間に呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFutureSE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskSchedulerのschedule - パラメーター:
task- トリガーが起動するたびに実行する RunnablestartTime- タスクの望ましい実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)- 戻り値:
- タスクの保留中の実行を表す
ScheduledFutureSE
scheduleAtFixedRate
public ScheduledFutureSE<?> scheduleAtFixedRate(RunnableSE task, InstantSE startTime, DurationSE period) インターフェースからコピーされた説明:TaskScheduler指定されたRunnableSE をスケジュールし、指定された実行時間に呼び出し、その後、指定された期間で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFutureSE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskSchedulerのscheduleAtFixedRate - パラメーター:
task- トリガーが起動するたびに実行する RunnablestartTime- タスクに必要な最初の実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)period- タスクの連続した実行の間隔- 戻り値:
- タスクの保留中の実行を表す
ScheduledFutureSE
scheduleAtFixedRate
インターフェースからコピーされた説明:TaskScheduler指定されたRunnableSE をスケジュールします。できるだけ早く開始し、指定された期間で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFutureSE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskSchedulerのscheduleAtFixedRate - パラメーター:
task- トリガーが起動するたびに実行する Runnableperiod- タスクの連続した実行の間隔- 戻り値:
- タスクの保留中の実行を表す
ScheduledFutureSE
scheduleWithFixedDelay
public ScheduledFutureSE<?> scheduleWithFixedDelay(RunnableSE task, InstantSE startTime, DurationSE delay) インターフェースからコピーされた説明:TaskScheduler指定されたRunnableSE をスケジュールし、指定された実行時間に呼び出し、その後、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFutureSE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskSchedulerのscheduleWithFixedDelay - パラメーター:
task- トリガーが起動するたびに実行する RunnablestartTime- タスクに必要な最初の実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)delay- ある実行の補完から次の実行の開始までの遅延- 戻り値:
- タスクの保留中の実行を表す
ScheduledFutureSE
scheduleWithFixedDelay
インターフェースからコピーされた説明:TaskScheduler指定されたRunnableSE をスケジュールします。できるだけ早く開始し、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。スケジューラがシャットダウンするか、返された
ScheduledFutureSE がキャンセルされると、実行は終了します。- 次で指定:
- インターフェース
TaskSchedulerのscheduleWithFixedDelay - パラメーター:
task- トリガーが起動するたびに実行する Runnabledelay- ある実行の補完から次の実行の開始までの遅延- 戻り値:
- タスクの保留中の実行を表す
ScheduledFutureSE
start
public void start()インターフェースからコピーされた説明:Lifecycleこのコンポーネントを起動します。コンポーネントがすでに実行されている場合は、例外をスローしないでください。
コンテナーの場合、これにより、自動起動しないコンポーネントも含め、適用されるすべてのコンポーネントにハードスタートシグナルが伝播されます。
stop
public void stop()インターフェースからコピーされた説明:Lifecycleこのメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。非同期停止動作が必要な場合は、SmartLifecycleとそのstop(Runnable)バリアントの実装を検討してください。この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、
LifecycleBean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止シグナルを事前に考慮することなく呼び出されます。コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。
コンテナーの場合、これは停止シグナルを適用するすべてのコンポーネントに伝播します。
stop
インターフェースからコピーされた説明:SmartLifecycleLifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。提供されたコールバックは、
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が設定されている場合、アクティブなスレッドの終了を追跡します。それ以外の場合は、この executor を閉じる必要はありません。- 次で指定:
- インターフェース
AutoCloseableSEのclose - オーバーライド:
- クラス
SimpleAsyncTaskExecutorのclose