淘先锋技术网

首页 1 2 3 4 5 6 7

GenericObjectPool利用一个org.apache.commons.collections.CursorableLinkedList对象来保存对象池里的对象。这种对象池的特色是:

可以设定最多能从池中借出多少个对象。

可以设定池中最多能保存多少个对象。

可以设定在池中已无对象可借的情况下,调用它的borrowObject方法时的行为,是等待、创建新的实例还是抛出异常。

可以分别设定对象借出和还回时,是否进行有效性检查。

可以设定是否使用一个单独的线程,对池内对象进行后台清理。

GenericObjectPool的构造方法共有七个,其中:

最简单的一个是GenericObjectPool(PoolableObjectFactory factory)。仅仅指明要用的PoolableObjectFactory实例,其它参数则采用默认值。

最复杂的一个是GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle,booleantestOnBorrow,booleantestOnReturn,longtimeBetweenEvictionRunsMillis,intnumTestsPerEvictionRun,longminEvictableIdleTimeMillis,booleantestWhileIdle)。其中:

参数factory指明要与之配合使用的PoolableObjectFactory实例。

参数maxActive指明能从池中借出的对象的最大数目。如果这个值不是正数,表示没有限制。

参数whenExhaustedAction指定在池中借出对象的数目已达极限的情况下,调用它的borrowObject方法时的行为。可以选用的值有:

GenericObjectPool.WHEN_EXHAUSTED_BLOCK,表示等待;

GenericObjectPool.WHEN_EXHAUSTED_GROW,表示创建新的实例(不过这就使maxActive参数失去了意义);

GenericObjectPool.WHEN_EXHAUSTED_FAIL,表示抛出一个java.util.NoSuchElementException异常。

参数maxWait指明若在对象池空时调用borrowObject方法的行为被设定成等待,最多等待多少毫秒。如果等待时间超过了这个数值,则会抛出一个java.util.NoSuchElementException异常。如果这个值不是正数,表示无限期等待。

参数testOnBorrow设定在借出对象时是否进行有效性检查。

参数testOnBorrow设定在还回对象时是否进行有效性检查。

参数timeBetweenEvictionRunsMillis,设定间隔每过多少毫秒进行一次后台对象清理的行动。如果这个值不是正数,则实际上不会进行后台对象清理。

参数numTestsPerEvictionRun,设定在进行后台对象清理时,每次检查几个对象。如果这个值不是正数,则每次检查的对象数是检查时池内对象的总数乘以这个值的负倒数再向上取整的结果――也就是说,如果这个值是-2(-3、-4、-5……)的话,那么每次大约检查当时池内对象总数的1/2(1/3、1/4、1/5……)左右。

参数minEvictableIdleTimeMillis,设定在进行后台对象清理时,视休眠时间超过了多少毫秒的对象为过期。过期的对象将被回收。如果这个值不是正数,那么对休眠时间没有特别的约束。

参数testWhileIdle,则设定在进行后台对象清理时,是否还对没有过期的池内对象进行有效性检查。不能通过有效性检查的对象也将被回收。

另一个比较特别的构造方法是GenericObjectPool(PoolableObjectFactory factory, GenericObjectPool.Config config) 。其中:

参数factory指明要与之配合使用的PoolableObjectFactory实例;

参数config则指明一个包括了各个参数的预设值的对象(详见《GenericObjectPool.Config》一节)。

剩下的五个构造函数则是最复杂的构造方法在某方面的简化版本,可以根据情况选用。它们是:

GenericObjectPool(PoolableObjectFactory factory,intmaxActive)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,booleantestOnBorrow,booleantestOnReturn)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle)

GenericObjectPool(PoolableObjectFactory factory,intmaxActive,bytewhenExhaustedAction,longmaxWait,intmaxIdle,booleantestOnBorrow,booleantestOnReturn)

这种对象池不可以在没有Jakarta Commmons Collections组件支持的情况下运行。