PoolableObjectFactory的几个方法总结
An interface defining life-cycle methods for instances to be served by an ObjectPool
.
By contract, when an ObjectPool
delegates to a PoolableObjectFactory
,
-
makeObject
is called whenever a new instance is needed. -
activateObject
is invoked on every instance that has beenpassivated
before it isborrowed
from the pool. -
validateObject
is invoked onactivated
instances to make sure they can beborrowed
from the pool.validateObject
may also be used to test an instance beingreturned
to the pool before it ispassivated
. It will only be invoked on an activated instance. -
passivateObject
is invoked on every instance when it is returned to the pool. -
destroyObject
is invoked on every instance when it is being "dropped" from the pool (whether due to the response fromvalidateObject
, or for reasons specific to the pool implementation.) There is no guarantee that the instance being destroyed will be considered active, passive or in a generally consistent state.
参考:http://commons.apache.org/proper/commons-pool/api-1.6/org/apache/commons/pool/PoolableObjectFactory.html
对于使用pool来说基本流程:
Object obj = null; try { obj = pool.borrowObject(); try { //...use the object... } catch(Exception e) { // invalidate the object pool.invalidateObject(obj); // do not return the object to the pool twice obj = null; } finally { // make sure the object is returned to the pool if(null != obj) { pool.returnObject(obj); } } } catch(Exception e) { // failed to borrow an object }
调用 pool的borrowObject()会触发内部调用poolableObjectFactory,基本流程如下:
1. 调用makeObject
()获取对象,一般需要实现。
2. 调用activateObject(),默认是一个空实现。
调用 pool的returnObject()会触发内部调用poolableObjectFactory,基本流程如下:
1. 调用validateObject()确保对象有效,默认实现返回True。
2. 调用passivateObject()让对象钝化,默认是一个空实现,貌似也没啥用。
2. 如果validateObject()返回False,调用destroyObject()。
相关推荐
总结起来,Apache Commons Pool 1.4是一个强大的工具,它简化了对象池的创建和管理,有助于优化资源利用,提高应用性能。通过理解其核心类和配置选项,开发者可以有效地管理和复用资源,降低系统开销。
此外,还提到了`PoolableObjectFactory`类,该类负责创建和回收对象,以及通过`getObject`方法获取对象。这些技术细节展示了Java多线程编程中对象池的应用场景和技术实现。 #### 九、总结 本文从Java多线程的基础...
1. **PoolableObjectFactory**:这是一个接口,定义了创建、初始化、激活、钝化、验证和销毁对象的方法。它是对象生命周期管理的关键,确保对象在池中的状态是可控的。 2. **ObjectPool**:这是另一个接口,代表...
`createPool`方法接收一个`ParameterObject`实例和一个`Class`类型作为参数,返回一个新的`ObjectPool`实例。这里的`ParameterObject`用于配置对象池的行为,例如最大和最小对象数量;而`Class`类型则指定了对象池中...
本项目是一个基于Java的对象池管理系统,旨在通过对象池技术减少频繁创建和销毁对象所带来的开销,从而提高系统性能和资源利用率。对象池技术允许在需要时从池中获取已存在的对象,而不是每次都创建新对象,使用完毕...
在`commons-pool-1.5.3`中,主要包含以下几个关键组件和接口: 1. **Poolable**: 这个接口标记了可以被池化的对象,它们通常需要实现`borrowObject()`、`returnObject()`和`invalidateObject()`等方法,以支持对象...
2. **PoolableObjectFactory**:这是PooledObjectFactory的一个具体实现,提供了基础的工厂方法,适用于大多数情况。 3. **GenericObjectPool**和**GenericKeyedObjectPool**:这两个类分别是无键和有键对象池的...
2. **PoolableObjectFactory**: 定义了对象的创建、验证、清理和销毁接口,用户可以根据需求实现这个接口来定制池化对象的行为。 3. **ObjectPool**: 代表一个对象池,提供了获取、归还对象的基本方法。 在 DBCP 中...
2. **对象池实现(GenericObjectPool)**:`GenericObjectPool` 是一个通用的对象池实现,它可以接受任何实现了 `PoolableObjectFactory` 的对象。它提供了线程安全的池管理和对象获取策略,如最大池大小、最大空闲...
源代码分析可以从以下几个方面入手: 1. **阅读源码了解对象池的实现细节**:查看`GenericObjectPool`类,了解其如何维护对象池,如何处理对象的借用和归还,以及如何根据配置参数调整池的大小。 2. **研究`...
DBCP的使用通常涉及到以下几个核心概念: 1. **DataSource**: 这是Java的 javax.sql.DataSource 接口,是DBCP中的关键组件,负责提供数据库连接。开发者可以通过配置DataSource来指定数据库的URL、用户名、密码等...
总结来说,"jndi-dbcp.jar&pool.jar"中的这两个库文件对于Java应用程序尤其是基于JNDI的数据库访问来说是至关重要的。它们提供了高效的数据库连接管理和对象池服务,有助于优化应用程序的性能和稳定性。在使用时,...
为了实现一个功能完善且易于扩展的对象池,一般会涉及以下几个核心类: 1. **对象池工厂(ObjectPoolFactory)类** - **职责**:管理和创建特定类型和设置的对象池。 - **方法**: - `createPool`:根据提供的...
PoolableObjectFactory接口中几个最基本的方法: 1. makeObject():制造一个对象 2. destoryObject():销毁一个对象 3. validateObject():验证一个对象是否还可用 通过以上两个接口,我们就可以自己实现一个对象...
在`commons-pool-1.5.5-src`源码中,我们可以看到以下几个关键部分: 1. **Pool接口和实现**:在`org.apache.commons.pool`包下,定义了基本的`Pool`接口,包括`borrowObject()`, `returnObject()`, `...
4. **Borrow and Return**: 开发者可以通过`borrowObject()`方法从池中获取对象,使用完毕后使用`returnObject()`方法归还。如果池中没有可用对象,`borrowObject()`会等待直到有对象可用或达到超时时间。 5. **...
总结起来,Apache Commons Pool 2.8.1.jar是Java开发中一个强大且灵活的对象池实现,它提供了多种配置选项和策略,能够帮助开发者有效地管理资源,提高系统的运行效率。通过深入理解和使用,我们可以将这一工具的...