2019独角兽企业重金招聘Python工程师标准>>>

maxTotal  允许创建资源的最大数量,默认值 -1,-1 代表无数量限制(int类型)

blockWhenExhausted 默认值 true ,当资源耗尽时,是否阻塞等待获取资源

maxWaitMillis 获取资源时的等待时间,单位毫秒。当 blockWhenExhausted 配置为 true 时,此值有效。 -1 代表无时间限制,一直阻塞直到有可用的资源。(long类型)

testOnBorrow  默认值 false ,当设置为true时,调用  factory.validateObject() 方法

testOnCreate   默认值 false,当设置为true时,调用  factory.validateObject() 方法

(备注:如果 testOnBorrow 或者 testOnCreate 中有一个 配置 为 true 时,就调用  factory.validateObject() )

lifo  资源的存取数据结构,默认值 true,true 资源按照栈结构存取,false 资源按照队列结构存取

fairness 当从池中获取资源或者将资源还回池中时 是否使用  java.util.concurrent.locks.ReentrantLock.ReentrantLock 的公平锁机制。 默认值 false, true 使用公平锁,false 不使用公平锁,

timeBetweenEvictionRunsMillis  回收资源线程的执行周期,单位毫秒。默认值 -1 ,-1 表示不启用线程回收资源。(long类型)

evictionPolicyClassName 资源回收策略,  默认值 org.apache.commons.pool2.impl.DefaultEvictionPolicy(String类型)

minEvictableIdleTimeMillis 资源最小空闲时间,  默认值 1800000,单位 毫秒,(long类型 )

softMinEvictableIdleTimeMillis 软资源最小空闲时间, 默认值 -1 ,单位 毫秒,(long类型 )

(备注,这个两个参数,在资源回收策略中,会使用到)

maxIdle  最大空闲资源数,默认值 8 (int类型)

minIdle  最小空闲资源数,默认值 0  (int类型 )

testWhileIdle  默认值 false; 设置为 true 时,当回收策略返回false时,则 调用 factory.activateObject()和factory.validateObject()

testOnReturn 默认值 false; 设置为 true 时,当将资源返还个资源池时候,验证资源的有效性,调用 factory.validateObject()方法,如果无效,则调用 factory.destroyObject()方法

numTestsPerEvictionRun  资源回收线程执行一次回收操作,回收资源的数量。默认值 3, (int类型)。

备注:

当 设置为0时,不回收资源。

设置为 小于0时,回收资源的个数为  (int)Math.ceil( 池中空闲资源个数 / Math.abs(numTestsPerEvictionRun) );

设置为 大于0时,回收资源的个数为  Math.min( numTestsPerEvictionRun,池中空闲的资源个数 );

从池中获取资源的逻辑

1:

如果 blockWhenExhausted 配置的 为 false,从资源池中获取资源,如果获取不到,则判断当前池中的对象数量是否超过了 maxTotal 设置的数量,如果没有超过,

则通过调用factory.makeObject() 创建对象,并将对象放入池中,执行第2步 。如果超过了,则返回 null,逻辑到此结束。

如果 blockWhenExhausted 配置的 为 true ,从资源池中获取资源,如果获取不到,则判断当前池中的对象数量是否超过了 maxTotal 设置的数量,如果没有超过,

则通过调用factory.makeObject() 创建对象,并将对象放入池中,执行第2步 。如果超过了,则阻塞等待,如果 MaxWaitMillis 配置的为 -1 则 阻塞等待,直到有可用的资源为止。

如果 maxWaitMillis 配置为 1000 则 阻塞等待 1000毫秒,如果有可用资源,执行第2步,如果没有则返回 null,逻辑到此结束。

2:将资源的状态 修改为 已分配,执行 第 3 步

3:调用 factory.activateObject() 方法,执行 第 4步

4:如果 testOnBorrow 或者 testOnCreate 中有一个 配置 为 true 时,则调用  factory.validateObject() 方法

5:以上步骤都完成了,返回 资源对象

将资源返还给池的逻辑

1:检查配置参数 testOnReturn,如果 为 true,调用 factory.validateObject()方法,验证资源对象的有效性,验证结果为 true,则调用 factory.destroyObject()方法,逻辑到此结束。

验证结果为 false,则执行第 2 步。

2:调用 factory.passivateObject()方法,然后执行 第 3 步

3:将资源的状态 修改为 未分配,执行第 4 步

4:进行判断 ( 资源池是否关闭 || (maxIdle > -1 ) &&   ( maxIdle <= 资源池空闲资源个数) )

如果 判断为 true,则调用 factory.destroyObject()方法,逻辑到此结束。

如果 判断为 false,则 将资源返还给资源池,逻辑到此结束。

Apache_common_pool 启动一个线程执行释放资源的工作(使用 java.util.Timer 实现)

从池中回收资源逻辑(回收资源的意思是,将资源从池中删除掉,例如,如果是TCP链接,则需要将链接断开,并从池中删除掉。)

1:根据 evictionPolicyClassName 配置的参数创建回收策略,

默认回收策略源码

import org.apache.commons.pool2.PooledObject;

public class DefaultEvictionPolicy<T>

implements EvictionPolicy<T>

{

public boolean evict(EvictionConfig config, PooledObject<T> underTest, int idleCount)

{

if (((config.getIdleSoftEvictTime() < underTest.getIdleTimeMillis()) && (config.getMinIdle() < idleCount)) || (config.getIdleEvictTime() < underTest.getIdleTimeMillis()))

{

return true;

}

return false;

}

}

if条件判断与

(softMinEvictableIdleTimeMillis < 资源的空闲时间 && Math.min(maxIdle,minIdle) < 目前池中空闲的资源数) ||

minEvictableIdleTimeMillis < 资源的空闲时间

等价

2:根据配置的参数 numTestsPerEvictionRun 计算,要回收的资源数量(具体的计算规则,请参照源码)

3:根据回收策略判断,资源是否需要回收。如果 是 则将资源从池中删除,并调用factory.destroyObject()方法。

如果 否 则根据配置的 testWhileIdle 参数,判断 是否执行 factory.activateObject()和factory.validateObject() 方法。

转载于:https://my.oschina.net/u/1381600/blog/601870

apache-common-pool2(配置参数详解,以及资源回收,从池中获取资源,将资源返还给池...相关推荐

  1. Rsync配置参数详解-什么是Rsync

    1.什么是Rsync-Rsync配置参数详解 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"R ...

  2. Ehcache配置参数详解

    ehcache配置参数详解 <?xml version="1.0" encoding="UTF-8"?><ehcache><dis ...

  3. nginx下gzip配置参数详解

    这篇文章主要介绍了nginx下gzip配置参数详解,本文同时给出了配置例子,以及一些注意事项,需要的朋友可以参考下 Nginx自带的有gzip模块 http://wiki.nginx.org/Ngin ...

  4. build.gradle配置参数详解

    转载地址:http://blog.csdn.net/baidu_31093133/article/details/51860637 build.gradle配置参数详解//声明是Android程序ap ...

  5. RocketMQ-PushConsumer配置参数详解

    基于RocketMQ 4.3,PushConsumer配置参数详解 1.Push消费模式下的配置 Push 默认使用的是DefaultMQPushConsumer. 2.consumerGroup C ...

  6. elastic-Job配置参数详解

    elastic-Job配置参数详解 1. 注册中心配置 (1) reg:zookeeper命名空间属性说明 属性名 类型 是否必填 缺省值 描述 id String 是   注册中心在Spring容器 ...

  7. Spring Boot笔记—多线程系列(三)—配置参数详解

    前言 前两篇文章,我们已经学会了如何使用spring boot的多线程和自定义线程池.这篇文章,我们要深入了解上一篇文章中线程池的配置具体含义. 准备工作 说明 为了方便观察线程的情况(如执行完毕数量 ...

  8. daemon.json配置参数详解

    ** daemon.json配置参数详解 ** 背景 docker安装的时候没有daemon.json这个文件 一般情况下,daemon.json中配置的项目参数,在启动参数中同样适用.(有些可能会冲 ...

  9. Windows--notes.ini文件的配置参数详解

    notes.ini文件的配置参数详解 用过LOTUS NOTES的人们都知道NOTES.INI文件对于LOTUS的重要性,但是有关notes.ini的参数设置方面比较少提及.以下总结了NOTES.IN ...

  10. zookeeper的zoo.cfg配置参数详解

    配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件) 参数名说明 clientPort客户端连接server的端口,即对外服务端口,一般设置为2181吧. dataDi ...

最新文章

  1. 怎么将vue模板转换为html,vue中自定义html文件的模板
  2. leetcode--括号生成--python
  3. PPLcnet和YOLO的碰撞,真的能在cpu上快到起飞?
  4. 设计模式复习-命令模式
  5. python3精要(64)-Python命名风格规范-google版
  6. cs8900a网卡驱动--寄存器
  7. S3c2440A平台HIVE注册表+binfs的实现
  8. linux 裸设备使用,linux裸设备使用
  9. 【codevs1557】 热浪, Dijkstra算法入门
  10. Sharding-JDBC水平分表(环境搭建)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记007
  11. 触发器使用教程和命名规范
  12. SQL Server中的基数估计过程
  13. SpringBoot RESTful 应用中的异常处理小结
  14. 人工智能目标检测模型总结(三)——yolov1模型(2)
  15. 回顾jvisualvm安装插件简单操作
  16. 复制iPhone端百度网盘下载好的视频到电脑(Mac / Windows)- iOS 12.4
  17. H3CSE园区-RSTP
  18. python精通 epub_精通Python自然语言处理 pdf epub mobi txt 下载
  19. 排队系统利用分布式设计的思考
  20. 解这道考研题要用克莱默法则的公式吗?

热门文章

  1. js判断是对象还是集合
  2. viewstate和session(转自博客园)
  3. 发点牢骚,关于微软,关于WPF/E
  4. linux(Centos7系统)中安装JDK、Tomcat、Mysql
  5. rabbitmq 用户管理
  6. 【割点】【割边】tarjan
  7. 《构建之法》阅读笔记05
  8. Tomcat 7 Connector 精读(2) 协议处理器 Http11Protocol(待续)
  9. [Javascript]jquery $(document).ready() 与window.onload的区别
  10. 070 random模块的使用