Tomcat线程池原理

Tomcat 两大组件

连接器Connector   负责对外沟通  使用到了线程池

  容器Container   负责实现Servlet规范

连接器 期中一部分组件NIO EndPoint的组成

  • LimitLatch 用来限流,可以控制最大连接个数,类似 J.U.C 中的 Semaphore 后面再讲
  • Acceptor 只负责【接收新的 socket 连接】
  • Poller 只负责监听 socket channel是否有【可读的 I/O 事件】
  • 一旦可读,封装一个任务对象(socketProcessor),提交给 Executor 线程池处理
  • Executor 线程池中的工作线程最终负责【处理请求】 

 

Tomcat 线程池扩展了 ThreadPoolExecutor,行为稍有不同

  • 如果总线程数达到 maximumPoolSize
  • 这时不会立刻抛 RejectedExecutionException 异常
  • 而是再次尝试将任务放入队列,如果还失败,才抛出 RejectedExecutionException 异常 

 

 

发生异常后  抓住异常   尝试使用force 方法 加入阻塞队列  还是失败  抛出异常     一定时间内重试 而且几乎只有一次机会

 

 

Tomcat线程池配置

Connector 配置 

 

 

Executor 线程配置 

 

 默认是守护新城

问题:无界阻塞队列是否意味着永远无法触发救急线程?

Tomcat对 队列的做了封装 taskQueue  修改了实现

 

 

这个图好像有点问题      总之是 核心线程不够用了 先考虑创建救急线程  再考虑加入队列

 

posted @   贪、欢  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示