The Executor (thread pool)
Table of Contents
Introduction
The Executor represents a thread pool that can be shared between components in Tomcat. Historically there has been a thread pool per connector created but this allows you to share a thread pool, between (primarily) connector but also other components when those get configured to support executors
The executor has to implement the org.apache.catalina.Executor
interface.
The executor is a nested element to the Service element. And in order for it to be picked up by the connectors, the Executor element has to appear prior to the Connector element in server.xml
Attributes
Common Attributes
All implementations of Executor support the following attributes:
Attribute | Description |
---|---|
className |
The class of the implementation. The implementation has to implement the
|
name |
The name used to reference this pool in other places in server.xml. The name is required and must be unique. |
Standard Implementation
This implemtenation uses a pool of platform threads to execute the tasks assigned to the Executor.
The className
attribute must be org.apache.catalina.core.StandardThreadExecutor
to use
this implementation.
The standard implementation supports the following attributes:
Attribute | Description |
---|---|
threadPriority |
(int) The thread priority for threads in the executor, the default is
|
daemon |
(boolean) Whether the threads should be daemon threads or not, the default is |
namePrefix |
(String) The name prefix for each thread created by the executor.
The thread name for an individual thread will be |
maxThreads |
(int) The max number of active threads in this pool, default is |
minSpareThreads |
(int) The minimum number of threads (idle and active) always kept alive, default is |
maxIdleTime |
(int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less
or equal to minSpareThreads. Default value is |
maxQueueSize |
(int) The maximum number of runnable tasks that can queue up awaiting
execution before we reject them. Default value is |
threadRenewalDelay |
(long) If a ThreadLocalLeakPreventionListener is configured,
it will notify this executor about stopped contexts.
After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time,
this option sets a delay between renewal of any 2 threads. The value is in ms,
default value is |
Virtual Thread Implementation
This implemtenation uses a new virtual thread to execute each task assigned to the Executor. This Executor requires a minimum Java version of Java 21.
The className
attribute must be org.apache.catalina.core.StandardVirtualThreadExecutor
to
use this implementation.
The virtual thread implementation supports the follow attributes:
Attribute | Description |
---|---|
namePrefix |
(String) The name prefix for each thread created by the executor.
The thread name for an individual thread will be |