Executor (スレッドプール)
目次
はじめに
Executor は、Tomcat のコンポーネント間で共有できるスレッドプールを表します。従来はコネクタごとにスレッドプールが作成されていましたが、これにより、主にコネクタ間だけでなく、Executor をサポートするように構成された他のコンポーネント間でもスレッドプールを共有できます。
Executor は、org.apache.catalina.Executor
インターフェースを実装する必要があります。
Executor は、Service 要素のネストされた要素です。コネクタで Executor が認識されるためには、server.xml 内で Executor 要素が Connector 要素の前に記述されている必要があります。
属性
共通属性
すべての Executor の実装は、以下の属性をサポートしています。
属性 | 説明 |
---|---|
className |
実装のクラス。実装は |
name |
server.xml 内の他の場所でこのプールを参照するために使用される名前。名前は必須であり、一意である必要があります。 |
標準実装
この実装では、プラットフォームスレッドのプールを使用して、Executor に割り当てられたタスクを実行します。
この実装を使用するには、className
属性を org.apache.catalina.core.StandardThreadExecutor
に設定する必要があります。
標準実装では、以下の属性がサポートされています。
属性 | 説明 |
---|---|
threadPriority |
(int) Executor 内のスレッドのスレッドプライオリティ。デフォルトは |
daemon |
(boolean) スレッドをデーモンスレッドにするかどうか。デフォルトは |
namePrefix |
(String) Executor によって作成された各スレッドの名前のプレフィックス。個々のスレッドのスレッド名は |
maxThreads |
(int) このプール内のアクティブスレッドの最大数。デフォルトは |
minSpareThreads |
(int) 常に維持されるスレッド (アイドルおよびアクティブ) の最小数。デフォルトは |
maxIdleTime |
(int) アクティブスレッド数が minSpareThreads 以下でない限り、アイドル状態のスレッドがシャットダウンされるまでのミリ秒数。デフォルト値は |
maxQueueSize |
(int) 実行を待機している実行可能タスクのキューに入れられる最大数。これを超えると拒否されます。デフォルト値は |
threadRenewalDelay |
(long) ThreadLocalLeakPreventionListener が構成されている場合、停止されたコンテキストについてこの Executor に通知します。コンテキストが停止した後、プール内のスレッドが更新されます。すべてのスレッドを同時に更新することを避けるため、このオプションは任意の 2 つのスレッドの更新間の遅延を設定します。値はミリ秒単位で、デフォルト値は |
仮想スレッド実装
この実装では、Executor に割り当てられた各タスクを実行するために、新しい仮想スレッドを使用します。この Executor には、Java 21 以降の Java バージョンが必要です。
この実装を使用するには、`className` 属性を `org.apache.catalina.core.StandardVirtualThreadExecutor` に設定する必要があります。
仮想スレッド実装では、以下の属性がサポートされています。
属性 | 説明 |
---|---|
namePrefix |
(String) Executor によって作成された各スレッドの名前のプレフィックス。個々のスレッドのスレッド名は `namePrefix+threadNumber` になります。デフォルト値は `tomcat-virt-` です。 |