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