public class ThreadPoolExecutorFactoryBean extends ExecutorConfigurationSupport implements FactoryBean<ExecutorServiceSE>, InitializingBean, DisposableBean
ThreadPoolExecutor
SE を Bean スタイルで構成し ( "corePoolSize"、"maxPoolSize"、"keepAliveSeconds"、"queueCapacity" プロパティを介して)、ネイティブ ExecutorService
SE 型の Bean 参照として公開できるようにします。 デフォルトの構成はコアプールサイズ 1 で、最大プールサイズとキュー容量は無制限です。これは、すべてのタスクで単一のスレッドを共有する Executors.newSingleThreadExecutor()
SE とほぼ同等です。"queueCapacity"
を 0 に設定すると、Executors.newCachedThreadPool()
SE を模倣し、プール内のスレッドを潜在的に非常に高い数に即座にスケーリングします。また、その時点で "maxPoolSize"
を設定し、場合によってはより高い "corePoolSize"
を設定することも検討してください(スケーリングの "allowCoreThreadTimeOut"
モードも参照してください)。
別の方法として、コンストラクターインジェクションを使用して ThreadPoolExecutor
SE インスタンスを直接セットアップするか、Executors
SE クラスを指すファクトリメソッド定義を使用できます。 これは、特に構成クラスの一般的な @Bean
メソッドに強く推奨されます。この FactoryBean
バリアントは、実際の Executor
型ではなく FactoryBean
型を返すように強制します。
代わりにタイミングベースの ScheduledExecutorService
SE が必要な場合は、ScheduledExecutorFactoryBean
を検討してください。
ExecutorService
SE, Executors
SE, ThreadPoolExecutor
SE, 直列化された形式 logger
OBJECT_TYPE_ATTRIBUTE
コンストラクターと説明 |
---|
ThreadPoolExecutorFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
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 に使用します。 |
ExecutorServiceSE | getObject() このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。 |
ClassSE<? extends ExecutorServiceSE> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
protected ExecutorServiceSE | initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) ターゲット ExecutorService SE インスタンスを作成します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 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 | setQueueCapacity(int queueCapacity) ThreadPoolExecutor の BlockingQueue の容量を設定します。 |
afterPropertiesSet, cancelRemainingTask, destroy, initialize, setAwaitTerminationMillis, setAwaitTerminationSeconds, setBeanName, setRejectedExecutionHandler, setThreadFactory, setThreadNamePrefix, setWaitForTasksToCompleteOnShutdown, shutdown
newThread
createThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadPriority
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
afterPropertiesSet
destroy
public void setCorePoolSize(int corePoolSize)
public void setMaxPoolSize(int maxPoolSize)
Integer.MAX_VALUE
です。public void setKeepAliveSeconds(int keepAliveSeconds)
public void setAllowCoreThreadTimeOut(boolean allowCoreThreadTimeOut)
デフォルトは「false」。
public void setQueueCapacity(int queueCapacity)
Integer.MAX_VALUE
です。正の値は、LinkedBlockingQueue インスタンスにつながります。その他の値は、SynchronousQueue インスタンスにつながります。
public void setExposeUnconfigurableExecutor(boolean exposeUnconfigurableExecutor)
デフォルトは "false" で、生のエグゼキューターを Bean 参照として公開します。このフラグを "true" に切り替えて、クライアントがエグゼキューターの構成を変更できないようにします。
protected ExecutorServiceSE initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler)
ExecutorConfigurationSupport
ExecutorService
SE インスタンスを作成します。afterPropertiesSet
によって呼び出されます。ExecutorConfigurationSupport
の initializeExecutor
threadFactory
- 使用する ThreadFactoryrejectedExecutionHandler
- 使用する RejectedExecutionHandlerExecutorConfigurationSupport.afterPropertiesSet()
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
- 使用する RejectedExecutionHandlerExecutorConfigurationSupport.afterPropertiesSet()
protected BlockingQueueSE<RunnableSE> createQueue(int queueCapacity)
正の容量値に対して LinkedBlockingQueue インスタンスが作成されます。SynchronousQueue その他。
queueCapacity
- 指定されたキュー容量 LinkedBlockingQueue
SE, SynchronousQueue
SE@Nullable public ExecutorServiceSE getObject()
FactoryBean
BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。
この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException
をスローします。
Spring 2.0 以降、FactoryBeans は null
オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。
FactoryBean<ExecutorServiceSE>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public ClassSE<? extends ExecutorServiceSE> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<ExecutorServiceSE>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
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
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()