Tomcat 工作原理——线程池概述

Tomcat 工作原理——线程池概述
一、什么事Tomcat线程池

  1. Tomcat线程可以理解为 Tomcat存放线程的池子。
  2. 是池子就会有容积,他就会满,所以当有一些不需要用的线程就需要回收掉,以保证这个池子里面的线程不会满出来。

二、Tomcat 线程池的属性参数

  1. maxThreads : 最大线程数——池子的总容量
  2. maxSpareThreads:最大空闲数——容量内可保持一段时间不被回收的数量
  3. minSpareThreads:最小空闲数——永久不被回收的数量
  4. maxidleTime:最大空闲时间——一个阈值,间隔多久开始回收
  5. acceptCount:最大等待队列数——超过池子容量的东西就需要进入等待队列,这就是等待队列最大容量

三、 过程描述

假设最大线程数(maxThreads ) =600条,也就是说那么那么超过600条的时候再怎么办? 那么只有两种情况了
1.不让它在进入池子,直接拒绝。
2.去门口排队,那么这时候就用到了
关于第二种情况就用到了上面的 最大等待队列数(acceptCount)假设acceptCount=100 当大于100时那只能请回了
*上面说的是比较单独的问题 下面说说在合理范围内的问题
个人认为 上面的参数(maxThreads ,maxSpareThreads,minSpareThreads)应该有包含关系!

比如:maxThreads >maxSpareThreads>minSpareThreads
下面说说为什么我这么认为?
假设:(maxThreads =600 )> (maxSpareThreads =500 )> (minSpareThreads=100)
现在的情况你必须都是在池内可容纳的情况下 进行的
tomcat 线线程池会有默认的永久性不回收的 最小空闲数(可打开 tomcat server.xml 文件看下)
当超过最小空闲数100条的时候 tomcat会继续创建线程 101、102、103…等等

  1. 场景一 :到达500条(最大空闲数)的时候,不在继续创建线程,表示没有新的请求了 过了一段时间(maxidleTime)还是没有新增线程 但是这些线程 还在使用 那么他就会一直保持 不会进行回收

  2. 场景二:到达500条后 突然有很多线程不在使用了 过了一段时间(maxidleTime)他就需要回收 这就是空闲线程的回收
    他回收的顺序是按住倒叙回收的 就是从第500条回收
    回收顺序 500,499,498…等等,
    当回收到地100条(最小空闲线程数)时 它就不在回收了 因为 100以内 是永久存在的 即使是空闲状态 也不会回收 所以 这100 也是包含在500条以内的。

  3. 场景三:当超过500条时 又不满足600 条 只要在这范围内的线程空闲了 他立马就会回收不用等一段时间(maxidleTime)

  4. 场景四:超过600条的情况最开始时候已经表述了。

那么在 当大于100 小于500 的时候 它回收的条件是什么呢?
它就是 阈值 :最大空闲时间(maxidleTime)假设60s ;那条线程空闲超过60 秒就会回收!

你可能感兴趣的:(Tomcat 工作原理——线程池概述)