クラス ThreadPoolExecutorFactoryBean

実装されたすべてのインターフェース:
SerializableSEThreadFactorySEEventListenerSEAwareBeanNameAwareDisposableBeanFactoryBean<ExecutorServiceSE>InitializingBeanApplicationContextAwareApplicationListener<ContextClosedEvent>LifecyclePhasedSmartLifecycle

public class ThreadPoolExecutorFactoryBean extends ExecutorConfigurationSupport implements FactoryBean<ExecutorServiceSE>
Bean スタイルで ThreadPoolExecutorSE を構成し( "corePoolSize"、"maxPoolSize"、"keepAliveSeconds"、"queueCapacity" プロパティを使用)、ネイティブ ExecutorServiceSE 型の Bean 参照として公開できる JavaBean

デフォルトの構成はコアプールサイズ 1 で、最大プールサイズとキュー容量は無制限です。これは、すべてのタスクで単一のスレッドを共有する Executors.newSingleThreadExecutor() とほぼ同等です。"queueCapacity" を 0 に設定すると、Executors.newCachedThreadPool() を模倣し、プール内のスレッドを潜在的に非常に高い数に即座にスケーリングします。また、その時点で "maxPoolSize" を設定し、場合によってはより高い "corePoolSize" を設定することも検討してください(スケーリングの "allowCoreThreadTimeOut" モードも参照してください)。

別の方法として、コンストラクターインジェクションを使用して ThreadPoolExecutorSE インスタンスを直接セットアップするか、ExecutorsSE クラスを指すファクトリメソッド定義を使用できます。 これは、特に構成クラスの一般的な @Bean メソッドに強く推奨されます。この FactoryBean バリアントは、実際の Executor 型ではなく FactoryBean 型を返すように強制します

代わりにタイミングベースの ScheduledExecutorServiceSE が必要な場合は、ScheduledExecutorFactoryBean を検討してください。

導入:
3.0
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • 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
      ターゲット ExecutorServiceSE インスタンスを作成します。afterPropertiesSet によって呼び出されます。
      次で指定:
      クラス ExecutorConfigurationSupportinitializeExecutor 
      パラメーター:
      threadFactory - 使用する ThreadFactory
      rejectedExecutionHandler - 使用する RejectedExecutionHandler
      戻り値:
      新しい ExecutorService インスタンス
      関連事項:
    • createExecutor

      protected ThreadPoolExecutorSE createExecutor(int corePoolSize, int maxPoolSize, int keepAliveSeconds, BlockingQueueSE<RunnableSE> queue, ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler)
      ThreadPoolExecutorSE またはそのサブクラスの新しいインスタンスを作成します。

      デフォルトの実装では、標準の ThreadPoolExecutorSE が作成されます。オーバーライドして、カスタム ThreadPoolExecutorSE サブクラスを提供できます。

      パラメーター:
      corePoolSize - 指定されたコアプールサイズ
      maxPoolSize - 指定された最大プールサイズ
      keepAliveSeconds - 指定されたキープアライブ時間(秒)
      queue - 使用する BlockingQueue
      threadFactory - 使用する ThreadFactory
      rejectedExecutionHandler - 使用する RejectedExecutionHandler
      戻り値:
      新しい ThreadPoolExecutor インスタンス
      関連事項:
    • createQueue

      protected BlockingQueueSE<RunnableSE> createQueue(int queueCapacity)
      BlockingQueue を作成して、ThreadPoolExecutor に使用します。

      正の容量値に対して LinkedBlockingQueue インスタンスが作成されます。SynchronousQueue その他。

      パラメーター:
      queueCapacity - 指定されたキュー容量
      戻り値:
      BlockingQueue インスタンス
      関連事項:
    • initiateEarlyShutdown

      protected void initiateEarlyShutdown()
      クラスからコピーされた説明: ExecutorConfigurationSupport
      早期シャットダウン信号: さらなるタスクをトリガーせず、ExecutorConfigurationSupport.shutdown() メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。これは coordinated lifecycle stop phase と併用します。

      遅延シャットダウンの兆候が決定されていない場合、つまり "acceptTasksAfterContextClose および "waitForTasksToCompleteOnShutdown" フラグが設定されていない場合、ExecutorConfigurationSupport.onApplicationEvent(ContextClosedEvent) から呼び出されます。

      デフォルトの実装は ExecutorConfigurationSupport.initiateShutdown() を呼び出します。

      オーバーライド:
      クラス ExecutorConfigurationSupportinitiateEarlyShutdown 
      関連事項:
    • getObject

      @Nullable public ExecutorServiceSE getObject()
      インターフェースからコピーされた説明: FactoryBean
      このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。

      BeanFactory と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。

      この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException をスローします。

      Spring 2.0 以降、FactoryBeans は null オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。

      次で指定:
      インターフェース FactoryBean<ExecutorServiceSE>getObject 
      戻り値:
      Bean のインスタンス (null にすることができます)
      関連事項:
    • getObjectType

      public ClassSE<? extends ExecutorServiceSE> 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 
      戻り値:
      公開されたオブジェクトがシングルトンかどうか
      関連事項: