执行器(线程池)

目录

简介

执行器表示一个线程池,可在 Tomcat 中的组件之间共享。从历史上看,每个连接器都创建一个线程池,但它允许你在连接器(主要是)和其他组件之间共享一个线程池,当这些组件配置为支持执行器时

执行器必须实现 org.apache.catalina.Executor 接口。

执行器是 服务 元素的嵌套元素。为了让连接器获取它,执行器元素必须出现在 server.xml 中的连接器元素之前

属性

通用属性

执行器的所有实现都支持以下属性

属性 描述
className

实现的类。该实现必须实现 org.apache.catalina.Executor 接口。此接口确保可以通过其 name 属性引用对象,并实现 Lifecycle,以便可以随容器一起启动和停止。className 的默认值为 org.apache.catalina.core.StandardThreadExecutor

name

用于在 server.xml 中其他位置引用此池的名称。名称是必需的,并且必须是唯一的。

标准实现

此实现使用一个平台线程池来执行分配给执行器的任务。

要使用此实现,className 属性必须为 org.apache.catalina.core.StandardThreadExecutor

标准实现支持以下属性

属性 描述
threadPriority

(int)执行器中线程的线程优先级,默认值为 5Thread.NORM_PRIORITY 常量的值)

daemon

(boolean)线程是否应为守护线程,默认值为 true

namePrefix

(String)执行器创建的每个线程的名称前缀。单个线程的线程名称将为 namePrefix+threadNumber。默认值为 tomcat-exec-

maxThreads

(int)此池中的活动线程的最大数量,默认值为 200

minSpareThreads

(int)始终保持活动的最小线程数(空闲和活动),默认值为 25

maxIdleTime

(int)空闲线程关闭前经过的毫秒数,除非活动线程数小于或等于 minSpareThreads。默认值为 60000(1 分钟)

maxQueueSize

(int)在拒绝可运行任务之前,可以排队等待执行的最大数量。默认值为 Integer.MAX_VALUE

threadRenewalDelay

(long)如果配置了 ThreadLocalLeakPreventionListener,它会将停止的上下文通知此执行器。在上下文停止后,池中的线程将被更新。为了避免同时更新所有线程,此选项设置了任意 2 个线程的更新之间的延迟。该值以毫秒为单位,默认值为 1000 毫秒。如果值为负数,则不会更新线程。

虚拟线程实现

此实现使用一个新的虚拟线程来执行分配给执行器的每个任务。此执行器需要 Java 21 的最低 Java 版本。

要使用此实现,className 属性必须为 org.apache.catalina.core.StandardVirtualThreadExecutor

虚拟线程实现支持以下属性

属性 描述
namePrefix

(String)执行器创建的每个线程的名称前缀。单个线程的线程名称将为 namePrefix+threadNumber。默认值为 tomcat-virt-