Executor (スレッドプール)

目次

はじめに

Executor は、Tomcat のコンポーネント間で共有できるスレッドプールを表します。従来はコネクタごとにスレッドプールが作成されていましたが、これにより、主にコネクタ間だけでなく、Executor をサポートするように構成された他のコンポーネント間でもスレッドプールを共有できます。

Executor は、org.apache.catalina.Executor インターフェースを実装する必要があります。

Executor は、Service 要素のネストされた要素です。コネクタで Executor が認識されるためには、server.xml 内で Executor 要素が Connector 要素の前に記述されている必要があります。

属性

共通属性

すべての Executor の実装は、以下の属性をサポートしています。

属性説明
className

実装のクラス。実装は org.apache.catalina.Executor インターフェースを実装する必要があります。このインターフェースは、オブジェクトがその name 属性を通じて参照可能であり、Lifecycle を実装することでコンテナと共に起動および停止できることを保証します。 className のデフォルト値は org.apache.catalina.core.StandardThreadExecutor です。

name

server.xml 内の他の場所でこのプールを参照するために使用される名前。名前は必須であり、一意である必要があります。

標準実装

この実装では、プラットフォームスレッドのプールを使用して、Executor に割り当てられたタスクを実行します。

この実装を使用するには、className 属性を org.apache.catalina.core.StandardThreadExecutor に設定する必要があります。

標準実装では、以下の属性がサポートされています。

属性説明
threadPriority

(int) Executor 内のスレッドのスレッドプライオリティ。デフォルトは 5 (Thread.NORM_PRIORITY 定数の値) です。

daemon

(boolean) スレッドをデーモンスレッドにするかどうか。デフォルトは true です。

namePrefix

(String) Executor によって作成された各スレッドの名前のプレフィックス。個々のスレッドのスレッド名は namePrefix+threadNumber になります。デフォルト値は tomcat-exec- です。

maxThreads

(int) このプール内のアクティブスレッドの最大数。デフォルトは 200 です。

minSpareThreads

(int) 常に維持されるスレッド (アイドルおよびアクティブ) の最小数。デフォルトは 25 です。

maxIdleTime

(int) アクティブスレッド数が minSpareThreads 以下でない限り、アイドル状態のスレッドがシャットダウンされるまでのミリ秒数。デフォルト値は 60000 (1 分) です。

maxQueueSize

(int) 実行を待機している実行可能タスクのキューに入れられる最大数。これを超えると拒否されます。デフォルト値は Integer.MAX_VALUE です。

threadRenewalDelay

(long) ThreadLocalLeakPreventionListener が構成されている場合、停止されたコンテキストについてこの Executor に通知します。コンテキストが停止した後、プール内のスレッドが更新されます。すべてのスレッドを同時に更新することを避けるため、このオプションは任意の 2 つのスレッドの更新間の遅延を設定します。値はミリ秒単位で、デフォルト値は 1000 ミリ秒です。値が負の場合、スレッドは更新されません。

仮想スレッド実装

この実装では、Executor に割り当てられた各タスクを実行するために、新しい仮想スレッドを使用します。この Executor には、Java 21 以降の Java バージョンが必要です。

この実装を使用するには、`className` 属性を `org.apache.catalina.core.StandardVirtualThreadExecutor` に設定する必要があります。

仮想スレッド実装では、以下の属性がサポートされています。

属性説明
namePrefix

(String) Executor によって作成された各スレッドの名前のプレフィックス。個々のスレッドのスレッド名は `namePrefix+threadNumber` になります。デフォルト値は `tomcat-virt-` です。