Apache Commons Pool的简单使用

由于在开源中国的资讯中看到Apache Commons Pool的版本升级了,Apache Commons Pool 2.6.2 发布java

而后发版文档中描述了修复的几个bug,不求甚解!设计模式

咱们就先用用这个最新的包来看看:学习

看javadoc文档,仍是比较简洁的测试

先来写一个demo:.net

写一个测试方法:线程

运行输出:设计

固然若是我把循环的次数加大,好比从8改为10,那么就会阻塞等待其余的先归还,固然还能够设置超时等的限制。3d

这里使用自带的GenericObjectPoolConfig,配置主要以下:对象

而后再介绍一下这些参数:blog

  1. maxActive: 连接池中最大链接数,默认为8.
  2. maxIdle: 连接池中最大空闲的链接数,默认为8.
  3. minIdle: 链接池中最少空闲的链接数,默认为0.
  4. maxWait: 当链接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时.
  5. minEvictableIdleTimeMillis: 链接空闲的最小时间,达到此值后空闲链接将可能会被移除。负值(-1)表示不移除。
  6. softMinEvictableIdleTimeMillis: 链接空闲的最小时间,达到此值后空闲连接将会被移除,且保留“minIdle”个空闲链接数。默认为-1.
  7. numTestsPerEvictionRun: 对于“空闲连接”检测线程而言,每次检测的连接资源的个数。默认为3.
  8. testOnBorrow: 向调用者输出“连接”资源时,是否检测是有有效,若是无效则从链接池中移除,并尝试获取继续获取。默认为false。建议保持默认值.
  9. testOnReturn:  向链接池“归还”连接时,是否检测“连接”对象的有效性。默认为false。建议保持默认值.
  10. testWhileIdle:  向调用者输出“连接”对象时,是否检测它的空闲超时;默认为false。若是“连接”空闲超时,将会被移除。建议保持默认值.
  11. timeBetweenEvictionRunsMillis:  “空闲连接”检测线程,检测的周期,毫秒数。若是为负值,表示不运行“检测线程”。默认为-1.
  12.  whenExhaustedAction: 当“链接池”中active数量达到阀值时,即“连接”资源耗尽时,链接池须要采起的手段, 默认为1:
     -> 0 : 抛出异常,
     -> 1 : 阻塞,直到有可用连接资源
     -> 2 : 强制建立新的连接资源

咱们能够看到PooledObjectFactory接口定义了要作哪一些方法。

按照阿里开发手册,若是在实现中使用了设计模式,那么在命名规则中的名称也要体现。

固然在上面的代码中,咱们使用的谁抽象类BasePooledObjectFactory

  • Object makeObject() : 建立一个新对象;当对象池中的对象个数不足时,将会使用此方法来输出一个新的"对象",并交付给对象池管理.
  • void destroyObject(Object obj) : 销毁池再也不须要的实例。
  • boolean validateObject(Object obj) : 检测对象是否有效。
  • void activateObject(Object obj) : 激活对象,让调用者使用时感受像一个新建立的对象同样。
  • void void passivateObject(Object obj) : 当调用者"归还对象"时,取消初始化要返回到空闲对象池的实例。

后续多学习点再继续!

参考:https://shift-alt-ctrl.iteye.com/blog/1917782

相关文章
相关标签/搜索