クラス ThreadPoolExecutorFactoryBean
- 実装されたすべてのインターフェース:
SerializableSE
、ThreadFactorySE
、EventListenerSE
、Aware
、BeanNameAware
、DisposableBean
、FactoryBean<ExecutorServiceSE>
、InitializingBean
、ApplicationContextAware
、ApplicationListener<ContextClosedEvent>
、Lifecycle
、Phased
、SmartLifecycle
ThreadPoolExecutor
SE を Bean スタイルで構成し ( "corePoolSize"、"maxPoolSize"、"keepAliveSeconds"、"queueCapacity" プロパティを介して)、ネイティブ ExecutorService
SE 型の Bean 参照として公開できるようにします。 デフォルトの構成はコアプールサイズ 1 で、最大プールサイズとキュー容量は無制限です。これは、すべてのタスクで単一のスレッドを共有する Executors.newSingleThreadExecutor()
とほぼ同等です。"queueCapacity"
を 0 に設定すると、Executors.newCachedThreadPool()
を模倣し、プール内のスレッドを潜在的に非常に高い数に即座にスケーリングします。また、その時点で "maxPoolSize"
を設定し、場合によってはより高い "corePoolSize"
を設定することも検討してください(スケーリングの "allowCoreThreadTimeOut"
モードも参照してください)。
別の方法として、コンストラクターインジェクションを使用して ThreadPoolExecutor
SE インスタンスを直接セットアップするか、Executors
SE クラスを指すファクトリメソッド定義を使用できます。 これは、特に構成クラスの一般的な @Bean
メソッドに強く推奨されます。この FactoryBean
バリアントは、実際の Executor
型ではなく FactoryBean
型を返すように強制します。
代わりにタイミングベースの ScheduledExecutorService
SE が必要な場合は、ScheduledExecutorFactoryBean
を検討してください。
- 導入:
- 3.0
- 作成者:
- Juergen Hoeller
- 関連事項:
フィールドサマリー
クラス org.springframework.scheduling.concurrent.ExecutorConfigurationSupport から継承されたフィールド
DEFAULT_PHASE, logger
インターフェース org.springframework.beans.factory.FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTE
コンストラクターのサマリー
方法の概要
修飾子と型メソッド説明protected ThreadPoolExecutorSE
createExecutor
(int corePoolSize, int maxPoolSize, int keepAliveSeconds, BlockingQueueSE<RunnableSE> queue, ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) ThreadPoolExecutor
SE またはそのサブクラスの新しいインスタンスを作成します。protected BlockingQueueSE<RunnableSE>
createQueue
(int queueCapacity) BlockingQueue を作成して、ThreadPoolExecutor に使用します。このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。ClassSE<? extends ExecutorServiceSE>
この FactoryBean が作成するオブジェクトの型、または事前に不明な場合はnull
を返します。protected ExecutorServiceSE
initializeExecutor
(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) ターゲットExecutorService
SE インスタンスを作成します。protected void
早期シャットダウンシグナル: さらなるタスクをトリガーせず、ExecutorConfigurationSupport.shutdown()
メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。boolean
このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?void
setAllowCoreThreadTimeOut
(boolean allowCoreThreadTimeOut) コアスレッドのタイムアウトを許可するかどうかを指定します。void
setCorePoolSize
(int corePoolSize) ThreadPoolExecutor のコアプールサイズを設定します。void
setExposeUnconfigurableExecutor
(boolean exposeUnconfigurableExecutor) この FactoryBean が、作成されたエグゼキューターの構成不可能なデコレーターを公開するかどうかを指定します。void
setKeepAliveSeconds
(int keepAliveSeconds) ThreadPoolExecutor のキープアライブ秒数を設定します。void
setMaxPoolSize
(int maxPoolSize) ThreadPoolExecutor の最大プールサイズを設定します。void
setPrestartAllCoreThreads
(boolean prestartAllCoreThreads) すべてのコアスレッドを開始して、アイドル状態で作業を待機させるかどうかを指定します。void
setQueueCapacity
(int queueCapacity) ThreadPoolExecutor の BlockingQueue の容量を設定します。void
setStrictEarlyShutdown
(boolean defaultEarlyShutdown) コンテキストのクローズ時に早期シャットダウンシグナルを開始し、アイドル状態のスレッドをすべて破棄し、それ以降のタスクの送信を拒否するかどうかを指定します。クラス org.springframework.scheduling.concurrent.ExecutorConfigurationSupport から継承されたメソッド
afterExecute, afterPropertiesSet, beforeExecute, cancelRemainingTask, destroy, getPhase, initialize, initiateShutdown, isRunning, onApplicationEvent, setAcceptTasksAfterContextClose, setApplicationContext, setAwaitTerminationMillis, setAwaitTerminationSeconds, setBeanName, setPhase, setRejectedExecutionHandler, setThreadFactory, setThreadNamePrefix, setVirtualThreads, setWaitForTasksToCompleteOnShutdown, shutdown, start, stop, stop
クラス org.springframework.scheduling.concurrent.CustomizableThreadFactory から継承されたメソッド
newThread
クラス org.springframework.util.CustomizableThreadCreator から継承されたメソッド
createThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadPriority
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.context.ApplicationListener から継承されたメソッド
supportsAsyncExecution
インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
isAutoStartup
コンストラクターの詳細
ThreadPoolExecutorFactoryBean
public ThreadPoolExecutorFactoryBean()
メソッドの詳細
setCorePoolSize
public void setCorePoolSize(int corePoolSize) ThreadPoolExecutor のコアプールサイズを設定します。デフォルトは 1 です。setMaxPoolSize
public void setMaxPoolSize(int maxPoolSize) ThreadPoolExecutor の最大プールサイズを設定します。デフォルトはInteger.MAX_VALUE
です。setKeepAliveSeconds
public void setKeepAliveSeconds(int keepAliveSeconds) ThreadPoolExecutor のキープアライブ秒数を設定します。デフォルトは 60 です。setQueueCapacity
public void setQueueCapacity(int queueCapacity) ThreadPoolExecutor の BlockingQueue の容量を設定します。デフォルトはInteger.MAX_VALUE
です。正の値は、LinkedBlockingQueue インスタンスにつながります。その他の値は、SynchronousQueue インスタンスにつながります。
setAllowCoreThreadTimeOut
public void setAllowCoreThreadTimeOut(boolean allowCoreThreadTimeOut) コアスレッドのタイムアウトを許可するかどうかを指定します。これにより、ゼロ以外のキューと組み合わせても動的な拡大と縮小が可能になります(最大プールサイズはキューがいっぱいになると拡大するため)。デフォルトは「false」。
setPrestartAllCoreThreads
public void setPrestartAllCoreThreads(boolean prestartAllCoreThreads) すべてのコアスレッドを開始して、アイドル状態で作業を待機させるかどうかを指定します。デフォルトは「false」。
- 導入:
- 5.3.14
- 関連事項:
setStrictEarlyShutdown
public void setStrictEarlyShutdown(boolean defaultEarlyShutdown) コンテキストのクローズ時に早期シャットダウンシグナルを開始し、アイドル状態のスレッドをすべて破棄し、それ以降のタスクの送信を拒否するかどうかを指定します。デフォルトは "false" です。詳細については、
ThreadPoolTaskExecutor.setStrictEarlyShutdown(boolean)
を参照してください。- 導入:
- 6.1.4
- 関連事項:
setExposeUnconfigurableExecutor
public void setExposeUnconfigurableExecutor(boolean exposeUnconfigurableExecutor) この FactoryBean が、作成されたエグゼキューターの構成不可能なデコレーターを公開するかどうかを指定します。デフォルトは "false" で、生のエグゼキューターを Bean 参照として公開します。このフラグを "true" に切り替えて、クライアントがエグゼキューターの構成を変更できないようにします。
initializeExecutor
protected ExecutorServiceSE initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) クラスからコピーされた説明:ExecutorConfigurationSupport
ターゲットExecutorService
SE インスタンスを作成します。afterPropertiesSet
によって呼び出されます。- 次で指定:
- クラス
ExecutorConfigurationSupport
のinitializeExecutor
- パラメーター:
threadFactory
- 使用する ThreadFactoryrejectedExecutionHandler
- 使用する RejectedExecutionHandler- 戻り値:
- 新しい ExecutorService インスタンス
- 関連事項:
createExecutor
protected ThreadPoolExecutorSE createExecutor(int corePoolSize, int maxPoolSize, int keepAliveSeconds, BlockingQueueSE<RunnableSE> queue, ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) ThreadPoolExecutor
SE またはそのサブクラスの新しいインスタンスを作成します。デフォルトの実装では、標準の
ThreadPoolExecutor
SE が作成されます。オーバーライドして、カスタムThreadPoolExecutor
SE サブクラスを提供できます。- パラメーター:
corePoolSize
- 指定されたコアプールサイズmaxPoolSize
- 指定された最大プールサイズkeepAliveSeconds
- 指定されたキープアライブ時間(秒)queue
- 使用する BlockingQueuethreadFactory
- 使用する ThreadFactoryrejectedExecutionHandler
- 使用する RejectedExecutionHandler- 戻り値:
- 新しい ThreadPoolExecutor インスタンス
- 関連事項:
createQueue
BlockingQueue を作成して、ThreadPoolExecutor に使用します。正の容量値に対して LinkedBlockingQueue インスタンスが作成されます。SynchronousQueue その他。
- パラメーター:
queueCapacity
- 指定されたキュー容量- 戻り値:
- BlockingQueue インスタンス
- 関連事項:
initiateEarlyShutdown
protected void initiateEarlyShutdown()クラスからコピーされた説明:ExecutorConfigurationSupport
早期シャットダウンシグナル: さらなるタスクをトリガーせず、ExecutorConfigurationSupport.shutdown()
メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。これはcoordinated lifecycle stop phase
と併用します。遅延シャットダウンの兆候が決定されていない場合、つまり
"acceptTasksAfterContextClose
および"waitForTasksToCompleteOnShutdown"
フラグが設定されていない場合、ExecutorConfigurationSupport.onApplicationEvent(ContextClosedEvent)
から呼び出されます。デフォルトの実装は
ExecutorConfigurationSupport.initiateShutdown()
を呼び出します。getObject
インターフェースからコピーされた説明:FactoryBean
このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方の設計パターンをサポートできます。この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する
FactoryBeanNotInitializedException
をスローします。FactoryBeans は
null
オブジェクトを返すことができます。Bean ファクトリはこれを通常の値と見なし、この場合はFactoryBeanNotInitializedException
をスローしません。ただし、FactoryBean 実装では、必要に応じてFactoryBeanNotInitializedException
自体をスローすることが推奨されます。- 次で指定:
- インターフェース
FactoryBean<ExecutorServiceSE>
のgetObject
- 戻り値:
- Bean のインスタンス (
null
にすることができます) - 関連事項:
getObjectType
インターフェースからコピーされた説明:FactoryBean
この FactoryBean が作成するオブジェクトの型、または事前に不明な場合はnull
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成する実装の場合、このメソッドはシングルトンの作成を可能な限り回避し、事前に型を推定する必要があります。プロトタイプの場合は、ここで意味のある型を返すことも推奨されます。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで
null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。- 次で指定:
- インターフェース
FactoryBean<ExecutorServiceSE>
のgetObjectType
- 戻り値:
- この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は
null
- 関連事項:
isSingleton
public boolean isSingleton()インターフェースからコピーされた説明:FactoryBean
このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?注意 : FactoryBean がシングルトンオブジェクトを保持していることを示している場合、
getObject()
から返されたオブジェクトは、所有する BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 :
false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンなFactoryBean
実装は、isSingleton()
実装がfalse
を返す場合、常に独立したインスタンスを返すと単純に想定されます。FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装ではtrue
が返されます。- 次で指定:
- インターフェース
FactoryBean<ExecutorServiceSE>
のisSingleton
- 戻り値:
- 公開されたオブジェクトがシングルトンかどうか
- 関連事項: