执行器 (线程池)

目录

简介

Executor 表示一个线程池,可在 Tomcat 中的组件之间共享。传统上,每个连接器都会创建一个线程池,但这允许您在(主要是)连接器之间共享一个线程池,当其他组件配置为支持执行器时也可以共享。

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

执行器是 Service 元素的嵌套元素。为了让连接器能够使用它,Executor 元素必须在 server.xml 中出现在 Connector 元素之前。

属性

通用属性

所有 Executor 的实现都支持以下属性:

属性描述
className

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

name

在 server.xml 的其他地方引用此池时使用的名称。此名称是必需的,并且必须是唯一的。

标准实现

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

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

标准实现支持以下属性:

属性描述
threadPriority

(int) 执行器中线程的优先级,默认值为 5 (Thread.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,它将通知此执行器已停止的上下文。上下文停止后,池中的线程会更新。为避免所有线程同时更新,此选项设置了任意两个线程更新之间的延迟。该值以毫秒为单位,默认值为 1000 毫秒。如果值为负,则线程不更新。

虚拟线程实现

此实现使用新的虚拟线程来执行分配给执行器的每个任务。

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

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

属性描述
namePrefix

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