executor
executor 是引擎,用户请求是经过executor进行处理的,知觉告诉我们这应该是一个多线程,线程池的容器,我们先从类的关系看下;
public interface Executor extends java.util.concurrent.Executor, Lifecycle {
public String getName();
@Deprecated
void execute(Runnable command, long timeout, TimeUnit unit);
}
executor是个接口,并继承jdk的juc包下面的executor接口
StandardThreadExecutor属性
standardThreadExecutor是实现类,如图它也继承了生命周期相关的接口,受tomcat的生命周期管理。

public class StandardThreadExecutor extends LifecycleMBeanBase
implements Executor, ResizableExecutor {
protected static final StringManager sm = StringManager.getManager(StandardThreadExecutor.class);
protected int threadPriority = Thread.NORM_PRIORITY;
//默认守护线程,主线退出后,会自动退出,不会有残余
protected boolean daemon = true;
//线程名字的前缀
protected String namePrefix = "tomcat-exec-";
//默认最大线程200
protected int maxThreads = 200;
//(int)最小线程数(空闲和活动)始终保持活动状态,默认为 25
protected int minSpareThreads = 25;
//最长活跃时间 60秒
protected int maxIdleTime = 60000;
//注意这里的ThreadPoolExecutor 是tomcat实现的线程池,不是juc包下的
protected ThreadPoolExecutor executor = null;
//线程名称
protected String name;
protected boolean prestartminSpareThreads = false;
//最大的队列大小
protected int maxQueueSize = Integer.MAX_VALUE;
//(long)如果配置了ThreadLocalLeakPreventionListener,它将通知此执行程序有关已停止的上下文。上下文停止后,池中的线程将被更新。为避免同时更新所有线程,此选项在任意2个线程的续订之间设置延迟。该值以ms为单位,默认值为1000ms。如果值为负,则不会续订线程。 ¶ Lifecycle模板方法
protected long threadRenewalDelay =
org.apache.tomcat.util.threads.Constants.DEFAULT_THREAD_RENEWAL_DELAY;
// 任务队列
private TaskQueue taskqueue = null;
我们看下这个组件启动的方法,生命周期的startInternal()方法
@Override
protected void startInternal() throws LifecycleException {
//自己实现的任务队列,后面讲下
taskqueue = new TaskQueue(maxQueueSize);

本文深入探讨了Tomcat中用于处理用户请求的StandardThreadExecutor。这是一个实现了Executor接口的类,它扩展了生命周期管理并自定义了线程池行为。StandardThreadExecutor使用TaskQueue,一个基于LinkedBlockingQueue的定制版本,来确保即使在无界队列的情况下,也能充分利用非核心线程。在启动和停止过程中,StandardThreadExecutor遵循特定的生命周期方法,如startInternal和stopInternal。通过重写offer方法,TaskQueue能够在需要时启动额外的线程,从而突破核心线程限制。这种设计提供了更灵活的线程池管理,同时保持了对外部调用的简单性。
最低0.47元/天 解锁文章
819

被折叠的 条评论
为什么被折叠?



