Apache common-pool2 GenericObjectPool的使用

Apache common-pool2 GenericObjectPool的使用

对象池是一种池化技术。设计模式中的享元模式就是说的一种池化的思想。项目中使用池化技术,可以大大减少因频繁申请内存和释放内存(malloc/free、new/delete)的开销,提高运行效率。例如,数据库连接池、线程池等,都是使用了池化的概念和技术。

这里我们直接使用 Apche common-pool2 中的GenericObjectPool来快速实现一个对象池。

使用介绍

使用GenericObjectPool只需要创建一个对象工厂类,继承BasePooledObjectFactory并重写它的create()destroyObject()

创建对象池对象时,传入对象工厂对象和配置对象,完成对象池的创建。配置主要为对象池最大容量,最大空闲对象个数,最小空闲个数。

  • maxActive: 链接池中最大连接数,默认为8.
  • maxIdle: 链接池中最大空闲的连接数,默认为8.
  • minIdle: 连接池中最少空闲的连接数,默认为0.如果当前测试对象的空闲时间大于config中设置的idleSoftEvictTime并且pool中空闲对象的数量大于minIdle,那么就会return true。然后就会回收销毁该对象。
    其中EvictionConfig中的idleSoftEvictTime和idleEvictTime的默认值是在BaseObjectPoolConfig中定义的。
  • maxWait: 当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时.
  • minEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲连接将可能会被移除。负值(-1)表示不移除。
  • softMinEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲链接将会被移除,且保留“minIdle”个空闲连接数。默认为-1.
  • numTestsPerEvictionRun: 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
  • testOnBorrow: 向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。默认为false。建议保持默认值.
  • testOnReturn: 向连接池“归还”链接时,是否检测“链接”对象的有效性。默认为false。建议保持默认值.
  • testWhileIdle: 向调用者输出“链接”对象时,是否检测它的空闲超时;默认为false。如果“链接”空闲超时,将会被移除。建议保持默认值.
  • timeBetweenEvictionRunsMillis: “空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
  • whenExhaustedAction: 当“连接池”中active数量达到阀值时,即“链接”资源耗尽时,连接池需要采取的手段, 默认为1:
    -> 0 : 抛出异常,
    -> 1 : 阻塞,直到有可用链接资源
    -> 2 : 强制创建新的链接资源

代码示例

例如,自定义对象工厂:

/**
 * @Description 人脸引擎对象工厂
 * @Author yin.jinbiao
 * @Date 2021/9/27 14:12
 * @Version 1.0
 */
@Slf4j
public class FaceEngineFactory extends BasePooledObjectFactory<FaceEngine> {
   

    private String libPath;
    private String appId;
    private String sdkKey;
    private EngineConfiguration engineConfiguration;

    public FaceEngineFactory(String libPath, String appId, String sdkKey, EngineConfiguration engineConfiguration) {
   
        this.appId = appId;
        this.sdkKey = sdkKey;
        this.libPath = libPath;
        this
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值