Apache Common-pool2 参数说明


Apache Common-pool2 参数说明


在本身使用 Apache Common-pool2 写链接池的时候,一下几个参数须要特别注意的: java

    maxTotal : 默认值:8 并发

            运行建立的最大的链接个数 spa

    minIdle   : 默认值:0 线程

            最小保持的链接个数
it

    maxIdle  :默认值:8 io

            最大的空闲个数
table

    maxWaitMillis : 默认值:-1 配置

            获取链接的最大的等待时间
object

    minEvictableIdleTimeMillis : 默认值:1000L * 60L * 30L (30分钟) 线程池

          链接空闲多久之后之后须要被回收。  ()

    timeBetweenEvictionRunsMillis  : 默认值: -1 

        链接池的 回收线程的检查时间 。 若是小于 0 ,则不会检查。

    numTestsPerEvictionRun  : 默认值 3  。 

        每次检查回收的线程的个数。 


——————————————————————————————————————————————

    上面是对经常使用的一些参数的说明,下面就 链接池的建立过程和销毁过程进行说明:

    线程池增长的过程以下:

            若是不停的建立链接,首先检查链接池里面是否有链接能够用,若是没有,检查 已经建立的链接的个数是否超过了maxTotal ,若是超过,等待maxWaitMillis 毫秒,看有没有链接释放,若是有,获取到链接,若是没有,直接返回 : java.util.NoSuchElementException: Timeout waiting for idle object 异常信息。

    若是没有超过maxTotal , 则建立一个链接出来。 用完这个链接,返回给线程池的时候,检查当前线程池的 大小是否是超过了 maxIdle , 若是超过了,直接 销毁掉这个链接,若是没有,返回给线程池。


    线程池减小的过程

        若是你没有配置 timeBetweenEvictionRunsMillis , 则链接池中保存的链接的最小的大小为 minIdle , 最大的值为 maxIdle  , maxIdle - minIdle 之间的数据是不会被主动回收的。

            这里就有个问题,若是你的系统的并发上去了。线程池的大小 增长到 maxIdle , 等系统的请求降下来之后,线程池的大小并无恢复到 minIdle 的大小。

       若是配置了  timeBetweenEvictionRunsMillis  , 就会启动一个线程, 每隔 这个时间就会去检查 , 若是若是超过了 minEvictableIdleTimeMillis  这个时间没有使用 , 或者 大于了 maxIdle , 会进行回收, 回收的线程的个数 默认是 3 个 。  若是回收完了 , 再去检查 线程池的 大小是否是 小于 minIdle , 若是小于 , 则建立 对应 少的 线程 , 而后添加到 对应的线程池 中 。