クラス 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
を拡張し、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
インターフェース org.springframework.context.SmartLifecycle から継承されたフィールド
DEFAULT_PHASE
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明void
close()
この close メソッドは、具体的なtask termination timeout
が設定されている場合、アクティブなスレッドの終了を追跡します。protected void
doExecute
(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
setPhase
(int phase) このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。void
setTargetTaskExecutor
(ExecutorSE targetTaskExecutor) スケジュールされたタスクの個別の実行を委譲するカスタムターゲットExecutor
SE を指定します。void
start()
このコンポーネントを起動します。void
stop()
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。void
stop
(RunnableSE callback) Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。クラス org.springframework.core.task.SimpleAsyncTaskExecutor から継承されたメソッド
execute, execute, getConcurrencyLimit, getThreadFactory, isActive, isThrottleActive, newThread, setConcurrencyLimit, setTaskDecorator, setTaskTerminationTimeout, setThreadFactory, setVirtualThreads, submit, submit, submitListenable, submitListenable
クラス 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
コンストラクターの詳細
SimpleAsyncTaskScheduler
public SimpleAsyncTaskScheduler()
メソッドの詳細
setClock
スケジューリングの目的で使用する監視を設定します。デフォルトのクロックは、デフォルトのタイムゾーンのシステムクロックです。
getClock
インターフェースからコピーされた説明:TaskScheduler
スケジューリングの目的で使用する監視を返します。- 次で指定:
- インターフェース
TaskScheduler
のgetClock
- 関連事項:
setPhase
public void setPhase(int phase) このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。デフォルトはSmartLifecycle.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- 関連事項:
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