Executor 代表一个线程池,可以在 Tomcat 中的组件之间共享。从历史上看,每个连接器都创建了一个线程池,但这允许您在(主要是)连接器和其他组件之间共享线程池(当这些组件被配置为支持执行器时)。
执行器必须实现 org.apache.catalina.Executor 接口。
执行器是 Service 元素的嵌套元素。并且为了让连接器接收到它,Executor 元素必须出现在 server.xml 中的 Connector 元素之前。示例配置:
<Service name="Catalina"> ... <!--The connectors can use a shared executor, you can define one or more named thread pools--> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> ... </Service>
Executor 的所有实现都支持以下属性:
className 实现的类。该实现必须实现 org.apache.catalina.Executor 接口。这个接口保证了对象可以通过它的name属性被引用并且实现了Lifecycle,这样它就可以和容器一起启动和停止。className 的默认值是 org.apache.catalina.core.StandardThreadExecutor
name 用于在 server.xml 中的其他位置引用此线程池的名称。该线程池名称是必需的,并且必须是唯一的。
默认实现支持以下属性:
threadPriority (int) executor中线程的线程优先级,默认为5(Thread.NORM_PRIORITY常量的值)
daemon (boolean) 线程是否应该是守护线程,默认为true
namePrefix (string) 执行程序创建的每个线程的名称前缀。单个线程的线程名称将为 namePrefix + threadNumber
maxThreads (int) 此池中最大活动线程数,默认为 200
minSpareThreads (int) 始终保持活动状态的最小线程数(空闲和活动),默认为 25
maxIdleTime (int) 空闲线程关闭前的毫秒数,除非活动线程数小于或等于 minSpareThreads。默认值为 60000(1 分钟)
maxQueueSize (int) 在我们拒绝它们之前可以排队等待执行的可运行任务的最大数量。默认值为 Integer.MAX_VALUE
prestartminSpareThreads (boolean) 启动 Executor 时是否启动 minSpareThreads,默认为 false
threadRenewalDelay (long) 如果配置了 ThreadLocalLeakPreventionListener,它将通知此执行程序有关已停止的上下文。上下文停止后,池中的线程将被更新。为避免同时更新所有线程,此选项设置更新任意 2 个线程之间的延迟。该值以毫秒为单位,默认值为 1000 毫秒。如果值为负,则不更新线程。
下面是从 server.xml 配置文件中截取的配置片段:
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> .. <Service name="Catalina"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> ... </Service> </Server>