执行器(线程池)
目录
简介
执行器表示一个线程池,可在 Tomcat 中的组件之间共享。从历史上看,每个连接器都创建一个线程池,但它允许你在连接器(主要是)和其他组件之间共享一个线程池,当这些组件配置为支持执行器时
执行器必须实现 org.apache.catalina.Executor
接口。
执行器是 服务 元素的嵌套元素。为了让连接器获取它,执行器元素必须出现在 server.xml 中的连接器元素之前
属性
通用属性
执行器的所有实现都支持以下属性
属性 | 描述 |
---|---|
className |
实现的类。该实现必须实现 |
name |
用于在 server.xml 中其他位置引用此池的名称。名称是必需的,并且必须是唯一的。 |
标准实现
此实现使用一个平台线程池来执行分配给执行器的任务。
要使用此实现,className
属性必须为 org.apache.catalina.core.StandardThreadExecutor
。
标准实现支持以下属性
属性 | 描述 |
---|---|
threadPriority |
(int)执行器中线程的线程优先级,默认值为 |
daemon |
(boolean)线程是否应为守护线程,默认值为 |
namePrefix |
(String)执行器创建的每个线程的名称前缀。单个线程的线程名称将为 |
maxThreads |
(int)此池中的活动线程的最大数量,默认值为 |
minSpareThreads |
(int)始终保持活动的最小线程数(空闲和活动),默认值为 |
maxIdleTime |
(int)空闲线程关闭前经过的毫秒数,除非活动线程数小于或等于 minSpareThreads。默认值为 |
maxQueueSize |
(int)在拒绝可运行任务之前,可以排队等待执行的最大数量。默认值为 |
threadRenewalDelay |
(long)如果配置了 ThreadLocalLeakPreventionListener,它会将停止的上下文通知此执行器。在上下文停止后,池中的线程将被更新。为了避免同时更新所有线程,此选项设置了任意 2 个线程的更新之间的延迟。该值以毫秒为单位,默认值为 |
虚拟线程实现
此实现使用一个新的虚拟线程来执行分配给执行器的每个任务。此执行器需要 Java 21 的最低 Java 版本。
要使用此实现,className
属性必须为 org.apache.catalina.core.StandardVirtualThreadExecutor
。
虚拟线程实现支持以下属性
属性 | 描述 |
---|---|
namePrefix |
(String)执行器创建的每个线程的名称前缀。单个线程的线程名称将为 |