commons-pool2源码走读(三) 抽象对象池BaseGenericObjectPool<T>

本文详细介绍了commons-pool2中BaseGenericObjectPool<T>类,它是GenericObjectPool和GenericKeyedObjectPool的基础,主要用于减少代码重复。内容包括属性加载、初始化、回收线程的实现,以及IdentityWrapper对象包装器的作用,该包装器确保对象能作为哈希键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

commons-pool2源码走读(三) 对象池BaseGenericObjectPool<T>

BaseGenericObjectPool<T>为GenericObjectPool和GenericKeyedObjectPool提供通用功能的基类。这个类存在的主要原因是减少两个池实现之间的代码复制。

1. 属性加载

BaseGenericObjectPool<T> 定义了所有能够自定义的属性,在类进行初始化的时候设置属性的默认值为BaseObjectPoolConfig和GenericKeyedObjectPoolConfig的默认值。然后子类通过继承其set方法重新覆盖(或延用)默认值。
其属性定义如下,可以看到所有的属性都是volatile的私有变量(fairness除外,在初始化指定后不再变化)。因为属性的变化不依赖之前的值,相较于使用锁而言使用volatile更加快捷高效。


    // 最大连接数,默认-1,当值为负数,使用Integer.MAX_VALUE代替
    private volatile int maxTotal =
            GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL;
    //当活跃对象总数达到上限,继续调用borrowObject是是否阻塞,默认true阻塞
    private volatile boolean blockWhenExhausted =
            BaseObjectPoolConfig.DEFAULT_BLOCK_WHEN_EXHAUSTED;
    //等待连接的超时时间,当blockWhenExhausted =ture,超过该值还未获得对象抛出异常。
    private volatile long maxWaitMillis =
            BaseObjectPoolConfig.DEFAULT_MAX_WAIT_MILLIS;
    //是否使用先进先出策略,默认true
    private volatile boolean lifo = BaseObjectPoolConfig.DEFAULT_LIFO;
    //是否使用平锁,默认false
    private final boolean fairness;
    //在创建对象的时候测试该对象,默认false
    private volatile boolean testOnCreate =
            BaseObjectPoolConfig.DEFAULT_TEST_ON_CREATE;
    //在借用对象的时候测试该对象,默认false
    private volatile boolean testOnBorrow =
            BaseObjectPoolConfig.DEFAULT_TEST_ON_BORROW;
    //在归还对象的时候测试该对象,默认false
    private volatile boolean testOnReturn =
            BaseObjectPoolConfig.DEFAULT_TEST_ON_RETURN;
    //在对象空闲的时候测试该对象,默认false
    private volatile boolean testWhileIdle =
            BaseObjectPoolConfig.DEFAULT_TEST_WHILE_IDLE;
    //回收线程的执行周期,即多长时候执行一次空闲对象检测。单位是毫秒数。
    //如果小于等于0,则不执行检测线程。默认值是-1;
    private volatile long timeBetweenEvictionRunsMillis =
            BaseObjectPoolConfig.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS;
    //回收线程每次回收时检测的空闲对象个数,即可能不是每个空闲对象都会进行检测是否能够被回收
    //当值>=0时,取该数与空闲对象总数的较小值。<0时:空闲总数/该值绝对值,并向上取整。默认3
    private volatile int numTestsPerEvictionRun =
            BaseObjectPoolConfig.DEFAULT_NUM_TESTS_PER_EVICTION_RUN;
    //空闲对象被回收的最小空闲时间,默认30分钟,空闲时间超过30分钟的对象将被回收线程强制回收,
    //不会保留最小的空闲对象数量
    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值