Executor (スレッドプール)

目次

はじめに

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

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

Executor は、Service 要素のネストされた要素です。コネクタに認識させるには、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 msです。値が負の場合、スレッドは再生成されません。

仮想スレッド実装

この実装は、Executor に割り当てられた各タスクを実行するために、新しい仮想スレッドを使用します。

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

仮想スレッド実装は以下の属性をサポートします。

属性説明
namePrefix

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