クラス ThreadPoolTaskExecutor

実装されたすべてのインターフェース:
SerializableSEExecutorSEThreadFactorySEEventListenerSEAwareBeanNameAwareDisposableBeanInitializingBeanApplicationContextAwareApplicationListener<ContextClosedEvent>LifecyclePhasedSmartLifecycleAsyncListenableTaskExecutorAsyncTaskExecutorTaskExecutorSchedulingTaskExecutor

public class ThreadPoolTaskExecutor extends ExecutorConfigurationSupport implements AsyncListenableTaskExecutor, SchedulingTaskExecutor
Bean スタイルで ThreadPoolExecutorSE を構成し( "corePoolSize"、"maxPoolSize"、"keepAliveSeconds"、"queueCapacity" プロパティを使用して)、Spring TaskExecutor として公開できる JavaBean。このクラスは、管理および監視(JMX など)にも適しています。いくつかの有用な属性を提供します。"corePoolSize"、"maxPoolSize"、"keepAliveSeconds" (実行時のすべての更新をサポート)。"poolSize"、"activeCount" (イントロスペクションのみ)。

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

注意 : このクラスは、Spring の TaskExecutor インターフェースと ExecutorSE インターフェースを実装します。前者はプライマリインターフェースであり、もう一方は単に二次的な利便性として機能します。このため、例外処理は、特に TaskRejectedException に関して、Executor 契約ではなく TaskExecutor 契約に従います。

別の方法として、コンストラクターインジェクションを使用して ThreadPoolExecutor インスタンスを直接セットアップするか、ExecutorsSE クラスを指すファクトリメソッド定義を使用することができます。このような生のエグゼキュータを Spring TaskExecutor として公開するには、単に ConcurrentTaskExecutor アダプターでラップします。

導入:
2.0
作成者:
Juergen Hoeller, R é my Guihard, Sam Brannen
関連事項:
  • コンストラクターの詳細

    • ThreadPoolTaskExecutor

      public ThreadPoolTaskExecutor()
  • メソッドの詳細

    • setCorePoolSize

      public void setCorePoolSize(int corePoolSize)
      ThreadPoolExecutor のコアプールサイズを設定します。デフォルトは 1 です。

      この設定は、JMX などを介して実行時に変更できます。

    • getCorePoolSize

      public int getCorePoolSize()
      ThreadPoolExecutor のコアプールサイズを返します。
    • setMaxPoolSize

      public void setMaxPoolSize(int maxPoolSize)
      ThreadPoolExecutor の最大プールサイズを設定します。デフォルトは Integer.MAX_VALUE です。

      この設定は、JMX などを介して実行時に変更できます。

    • getMaxPoolSize

      public int getMaxPoolSize()
      ThreadPoolExecutor の最大プールサイズを返します。
    • setKeepAliveSeconds

      public void setKeepAliveSeconds(int keepAliveSeconds)
      ThreadPoolExecutor のキープアライブ秒数を設定します。

      デフォルトは 60 です。

      この設定は、JMX などを介して実行時に変更できます。

    • getKeepAliveSeconds

      public int getKeepAliveSeconds()
      ThreadPoolExecutor のキープアライブ秒数を返します。
    • setQueueCapacity

      public void setQueueCapacity(int queueCapacity)
      ThreadPoolExecutor の BlockingQueue の容量を設定します。

      デフォルトは Integer.MAX_VALUE です。

      正の値は、LinkedBlockingQueue インスタンスにつながります。その他の値は、SynchronousQueue インスタンスにつながります。

      関連事項:
    • getQueueCapacity

      public int getQueueCapacity()
      ThreadPoolExecutor の BlockingQueue の容量を返します。
      導入:
      5.3.21
      関連事項:
    • setAllowCoreThreadTimeOut

      public void setAllowCoreThreadTimeOut(boolean allowCoreThreadTimeOut)
      コアスレッドのタイムアウトを許可するかどうかを指定します。これにより、ゼロ以外のキューと組み合わせても動的な拡大と縮小が可能になります(最大プールサイズはキューがいっぱいになると拡大するため)。

      デフォルトは「false」。

      関連事項:
    • setPrestartAllCoreThreads

      public void setPrestartAllCoreThreads(boolean prestartAllCoreThreads)
      すべてのコアスレッドを開始して、アイドル状態で作業を待機させるかどうかを指定します。

      デフォルトは "false" で、オンデマンドでスレッドを開始し、プールに追加します。

      導入:
      5.3.14
      関連事項:
    • setStrictEarlyShutdown

      public void setStrictEarlyShutdown(boolean defaultEarlyShutdown)
      コンテキストのクローズ時に早期シャットダウンシグナルを開始し、アイドル状態のスレッドをすべて破棄し、それ以降のタスクの送信を拒否するかどうかを指定します。

      デフォルトでは、既存のタスクは、いかなる場合でも、調整されたライフサイクル停止フェーズ内で完了することが許可されます。この設定は、コンテキストを閉じるときに明示的な ThreadPoolExecutor.shutdown() 呼び出しをトリガーし、それ以降のタスクの送信を拒否するかどうかを制御するだけです。

      6.1.4 では、デフォルトは "false" で、コンテキストが閉じられた後に到着する遅延タスクを寛大に許可し、ライフサイクル停止フェーズに引き続き参加します。これは、既存のタスクの補完を明示的に待機せず、調整されたライフサイクル停止フェーズを完全にバイパスする ExecutorConfigurationSupport.setAcceptTasksAfterContextClose(boolean) とは異なることに注意してください。

      6.1 で確立された ThreadPoolTaskScheduler のデフォルト動作に似た厳密な早期シャットダウン信号の場合は、これを "true" に切り替えます。関連フラグ ExecutorConfigurationSupport.setAcceptTasksAfterContextClose(boolean) および ExecutorConfigurationSupport.setWaitForTasksToCompleteOnShutdown(boolean) がこの設定をオーバーライドし、調整されたライフサイクル停止フェーズが行われずに遅いシャットダウンが発生することに注意してください。

      導入:
      6.1.4
      関連事項:
    • setTaskDecorator

      public void setTaskDecorator(TaskDecorator taskDecorator)
      実行しようとしている RunnableSE に適用するカスタム TaskDecorator を指定します。

      このようなデコレータは、必ずしもユーザー提供の Runnable/Callable に適用されるのではなく、実際の実行コールバック(ユーザー提供のタスクのラッパーである可能性があります)に適用されることに注意してください。

      主な使用例は、タスクの呼び出しの周囲に実行コンテキストを設定するか、タスク実行の監視 / 統計を提供することです。

      注意 TaskDecorator 実装での例外処理は、execute 呼び出しによる単純な Runnable 実行に制限されています。#submit 呼び出しの場合、公開された Runnable は、例外を伝搬しない FutureTask になります。例外を評価するには、キャストして Future#get を呼び出す必要がある場合があります。このような Future ケースで例外にアクセスする方法の例については、ThreadPoolExecutor#afterExecute javadoc を参照してください。

      導入:
      4.3
    • initializeExecutor

      protected ExecutorServiceSE initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler)
      メモ: このメソッドは、ExecutorServiceSE をその基本クラスに公開しますが、実際の ThreadPoolExecutorSE ハンドルを内部に保存します。このメソッドをオーバーライドして、executor を置き換えるのではなく、単に ExecutorService ハンドルを装飾したり、カスタム状態を保管したりしてください。
      次で指定:
      クラス ExecutorConfigurationSupportinitializeExecutor 
      パラメーター:
      threadFactory - 使用する ThreadFactory
      rejectedExecutionHandler - 使用する RejectedExecutionHandler
      戻り値:
      新しい ExecutorService インスタンス
      関連事項:
    • createQueue

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

      LinkedBlockingQueue インスタンスは、正の容量値に対して作成されます。それ以外の場合は SynchronousQueue。

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

      public ThreadPoolExecutorSE getThreadPoolExecutor() throws IllegalStateExceptionSE
      ネイティブアクセスの基になる ThreadPoolExecutor を返します。
      戻り値:
      基になる ThreadPoolExecutor (非 null)
      例外:
      IllegalStateExceptionSE - ThreadPoolTaskExecutor がまだ初期化されていない場合
    • getPoolSize

      public int getPoolSize()
      現在のプールサイズを返します。
      関連事項:
    • getQueueSize

      public int getQueueSize()
      現在のキューサイズを返します。
      導入:
      5.3.21
      関連事項:
    • getActiveCount

      public int getActiveCount()
      現在アクティブなスレッドの数を返します。
      関連事項:
    • execute

      public void execute(RunnableSE task)
      インターフェースからコピーされた説明: TaskExecutor
      指定された task を実行します。

      実装が非同期実行戦略を使用している場合、呼び出しはすぐに戻るか、同期実行の場合はブロックする可能性があります。

      次で指定:
      インターフェース ExecutorSEexecuteSE 
      次で指定:
      インターフェース TaskExecutorexecute 
      パラメーター:
      task - 実行する Runnable (非 null)
    • submit

      public FutureSE<?> submit(RunnableSE task)
      インターフェースからコピーされた説明: AsyncTaskExecutor
      実行可能な Runnable タスクを送信し、そのタスクを表す Future を受け取ります。Future は完了時に null の結果を返します。

      6.1 では、このメソッドには TaskExecutor.execute(Runnable) に委譲するデフォルトの実装が付属しています。

      次で指定:
      インターフェース AsyncTaskExecutorsubmit 
      パラメーター:
      task - 実行する Runnable (非 null)
      戻り値:
      タスクの保留中の補完を表す Future
    • submit

      public <T> FutureSE<T> submit(CallableSE<T> task)
      インターフェースからコピーされた説明: AsyncTaskExecutor
      Callable タスクを送信して実行し、そのタスクを表す Future を受け取ります。Future は、完了時に Callable の結果を返します。

      6.1 では、このメソッドには TaskExecutor.execute(Runnable) に委譲するデフォルトの実装が付属しています。

      次で指定:
      インターフェース AsyncTaskExecutorsubmit 
      パラメーター:
      task - 実行する Callable (非 null)
      戻り値:
      タスクの保留中の補完を表す Future
    • submitListenable

      public ListenableFuture<?> submitListenable(RunnableSE task)
      インターフェースからコピーされた説明: AsyncListenableTaskExecutor
      Runnable タスクを実行のために送信し、そのタスクを表す ListenableFuture を受け取ります。Future は完了時に null の結果を返します。
      次で指定:
      インターフェース AsyncListenableTaskExecutorsubmitListenable 
      パラメーター:
      task - 実行する Runnable (非 null)
      戻り値:
      保留中のタスクの補完を表す ListenableFuture 
    • submitListenable

      public <T> ListenableFuture<T> submitListenable(CallableSE<T> task)
      インターフェースからコピーされた説明: AsyncListenableTaskExecutor
      Callable タスクを実行のために送信し、そのタスクを表す ListenableFuture を受け取ります。Future は、完了時に Callable の結果を返します。
      次で指定:
      インターフェース AsyncListenableTaskExecutorsubmitListenable 
      パラメーター:
      task - 実行する Callable (非 null)
      戻り値:
      保留中のタスクの補完を表す ListenableFuture 
    • cancelRemainingTask

      protected void cancelRemainingTask(RunnableSE task)
      クラスからコピーされた説明: ExecutorConfigurationSupport
      ExecutorService.shutdownNow() から返された、実行を開始していない指定された残りのタスクをキャンセルします。
      オーバーライド:
      クラス ExecutorConfigurationSupportcancelRemainingTask 
      パラメーター:
      task - キャンセルするタスク (通常、RunnableFutureSE )
      関連事項:
    • initiateEarlyShutdown

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

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

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

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