tomcat线程池的配置及源码实现
来源:互联网 发布:linux vim装不上 编辑:程序博客网 时间:2024/06/16 06:20
tomcat中线程池的配置是哎server.xml中:
<Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> </Service></Server>
具体可配置参数如下:
http://tomcat.apache.org/tomcat-7.0-doc/config/executor.html#Standard_Implementation
在tomcat启动的时候,会触发StandardService的 startInternal方法:
protected void startInternal() throws LifecycleException { setState(LifecycleState.STARTING); // Start our defined Container first if (container != null) { synchronized (container) { container.start(); } } synchronized (executors) { for (Executor executor: executors) { executor.start(); } } // Start our defined Connectors second synchronized (connectorsLock) { for (Connector connector: connectors) { try { // If it has already failed, don't try and start it if (connector.getState() != LifecycleState.FAILED) { connector.start(); } } catch (Exception e) { log.error(sm.getString( "standardService.connector.startFailed", connector), e); } } }}
之后触发StandardThreadExecutor的startInternal方法:
@Overrideprotected void startInternal() throws LifecycleException { taskqueue = new TaskQueue(maxQueueSize); TaskThreadFactory tf = new TaskThreadFactory(namePrefix,daemon,getThreadPriority()); executor = new ThreadPoolExecutor(getMinSpareThreads(), getMaxThreads(), maxIdleTime, TimeUnit.MILLISECONDS,taskqueue, tf); executor.setThreadRenewalDelay(threadRenewalDelay); if (prestartminSpareThreads) { executor.prestartAllCoreThreads(); } taskqueue.setParent(executor); setState(LifecycleState.STARTING);}
此StandardThreadExecutor正是tomcat使用的线程池,类声明如下:
public class StandardThreadExecutor extends LifecycleMBeanBase implements Executor, ResizableExecutor
此类内部持有了一个protected ThreadPoolExecutor executor
线程池,具体工作都是委托executor进行处理。
从上面可以看出,在new ThreadPoolExecutor时,会使用在server.xml中配置的参数,如核心线程数,最大线程数等。
另外,线程池的任务队列是一个TaskQueue,该类声明如下:
public class TaskQueue extends LinkedBlockingQueue<Runnable>
其实就是一个LinkedBlockingQueue,如果配置了maxQueueSize,那么就是有界队列,参数maxThreads就会有效,在有界队列满了之后,会继续创建大于核心线程数的线程;如果没有配置maxQueueSize,那么队列的长度默认为Integer.MAX_VALUE,理论上等价于无界队列,此时maxThreads便起不到作用。
阅读全文
0 0
- tomcat线程池的配置及源码实现
- 3.2.2Tomcat的connector及线程池配置
- 【Tomcat线程池】线程池配置及线程分配测试
- TOMCAT线程池的配置
- TOMCAT的线程池实现
- Tomcat的线程池实现
- tomcat线程池的实现
- Tomcat线程池配置
- 配置tomcat线程池
- tomcat 环境及线程池、jdk配置详解
- muduo源码分析--线程池的实现
- Tomcat连接线程池配置
- Tomcat连接线程池配置
- Tomcat连接线程池配置
- 线程池的用法及配置
- Tomcat线程池实现简介
- Tomcat线程池实现简介
- 浅谈tomcat的配置及数据库连接池的配置
- 关于变量的类型及存储剖析和大小端问题
- bootstrap系列之十三导航
- 欢迎使用CSDN-markdown编辑器
- 图解JAVA对象的创建过程
- Linux源码-do_fork()
- tomcat线程池的配置及源码实现
- POJ
- Codeforces 696C PLEASE 概率(推公式)
- 准备开讲项目管理
- spring-mvc-web.xml配置文件简单介绍
- Java工程师成神之路
- bootstrap系列之十四导航条
- leetcode 146. LRU Cache 链表操作与缓存处理
- N皇后问题