`
san_yun
  • 浏览: 2662999 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

PoolableObjectFactory几个方法的总结

    博客分类:
  • pool
 
阅读更多

PoolableObjectFactory的几个方法总结

An interface defining life-cycle methods for instances to be served by an ObjectPool.

By contract, when an ObjectPool delegates to a PoolableObjectFactory,

  1. makeObject is called whenever a new instance is needed.
  2. activateObject is invoked on every instance that has been passivated before it is borrowed from the pool.
  3. validateObject is invoked on activated instances to make sure they can be borrowed from the pool. validateObject may also be used to test an instance being returned to the pool before it is passivated. It will only be invoked on an activated instance.
  4. passivateObject is invoked on every instance when it is returned to the pool.
  5. destroyObject is invoked on every instance when it is being "dropped" from the pool (whether due to the response from validateObject, 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()。

 

分享到:
评论

相关推荐

    commons-pool2-2.8.1.jar

    总结起来,Apache Commons Pool 2.8.1.jar是Java开发中一个强大且灵活的对象池实现,它提供了多种配置选项和策略,能够帮助开发者有效地管理资源,提高系统的运行效率。通过深入理解和使用,我们可以将这一工具的...

    commons-pool-1.4.zip

    总结起来,Apache Commons Pool 1.4是一个强大的工具,它简化了对象池的创建和管理,有助于优化资源利用,提高应用性能。通过理解其核心类和配置选项,开发者可以有效地管理和复用资源,降低系统开销。

    Java多线程编程总结

    此外,还提到了`PoolableObjectFactory`类,该类负责创建和回收对象,以及通过`getObject`方法获取对象。这些技术细节展示了Java多线程编程中对象池的应用场景和技术实现。 #### 九、总结 本文从Java多线程的基础...

    java对象池化技术[参照].pdf

    1. **PoolableObjectFactory**:这是一个接口,定义了创建、初始化、激活、钝化、验证和销毁对象的方法。它是对象生命周期管理的关键,确保对象在池中的状态是可控的。 2. **ObjectPool**:这是另一个接口,代表...

    Java对象池技术的原理

    `createPool`方法接收一个`ParameterObject`实例和一个`Class`类型作为参数,返回一个新的`ObjectPool`实例。这里的`ParameterObject`用于配置对象池的行为,例如最大和最小对象数量;而`Class`类型则指定了对象池中...

    基于Java的对象池管理系统.zip

    本项目是一个基于Java的对象池管理系统,旨在通过对象池技术减少频繁创建和销毁对象所带来的开销,从而提高系统性能和资源利用率。对象池技术允许在需要时从池中获取已存在的对象,而不是每次都创建新对象,使用完毕...

    apache线程池

    在`commons-pool-1.5.3`中,主要包含以下几个关键组件和接口: 1. **Poolable**: 这个接口标记了可以被池化的对象,它们通常需要实现`borrowObject()`、`returnObject()`和`invalidateObject()`等方法,以支持对象...

    commo-pool, commons-pool commons-pool commons-pool

    2. **PoolableObjectFactory**:这是PooledObjectFactory的一个具体实现,提供了基础的工厂方法,适用于大多数情况。 3. **GenericObjectPool**和**GenericKeyedObjectPool**:这两个类分别是无键和有键对象池的...

    dbcp和pool.jar

    2. **PoolableObjectFactory**: 定义了对象的创建、验证、清理和销毁接口,用户可以根据需求实现这个接口来定制池化对象的行为。 3. **ObjectPool**: 代表一个对象池,提供了获取、归还对象的基本方法。 在 DBCP 中...

    commons-pool2-2.3-bin.zip

    2. **对象池实现(GenericObjectPool)**:`GenericObjectPool` 是一个通用的对象池实现,它可以接受任何实现了 `PoolableObjectFactory` 的对象。它提供了线程安全的池管理和对象获取策略,如最大池大小、最大空闲...

    commons-pool-1.2-src.zip

    源代码分析可以从以下几个方面入手: 1. **阅读源码了解对象池的实现细节**:查看`GenericObjectPool`类,了解其如何维护对象池,如何处理对象的借用和归还,以及如何根据配置参数调整池的大小。 2. **研究`...

    commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    DBCP的使用通常涉及到以下几个核心概念: 1. **DataSource**: 这是Java的 javax.sql.DataSource 接口,是DBCP中的关键组件,负责提供数据库连接。开发者可以通过配置DataSource来指定数据库的URL、用户名、密码等...

    jndi-dbcp.jar&pool.jar

    总结来说,"jndi-dbcp.jar&pool.jar"中的这两个库文件对于Java应用程序尤其是基于JNDI的数据库访问来说是至关重要的。它们提供了高效的数据库连接管理和对象池服务,有助于优化应用程序的性能和稳定性。在使用时,...

    Java对象池技术的原理及其实现

    为了实现一个功能完善且易于扩展的对象池,一般会涉及以下几个核心类: 1. **对象池工厂(ObjectPoolFactory)类** - **职责**:管理和创建特定类型和设置的对象池。 - **方法**: - `createPool`:根据提供的...

    Java FTPClient连接池的实现

    PoolableObjectFactory接口中几个最基本的方法: 1. makeObject():制造一个对象 2. destoryObject():销毁一个对象 3. validateObject():验证一个对象是否还可用 通过以上两个接口,我们就可以自己实现一个对象...

    commons-pool-1.5.5-src 源码

    在`commons-pool-1.5.5-src`源码中,我们可以看到以下几个关键部分: 1. **Pool接口和实现**:在`org.apache.commons.pool`包下,定义了基本的`Pool`接口,包括`borrowObject()`, `returnObject()`, `...

    commons-pool-1.6

    4. **Borrow and Return**: 开发者可以通过`borrowObject()`方法从池中获取对象,使用完毕后使用`returnObject()`方法归还。如果池中没有可用对象,`borrowObject()`会等待直到有对象可用或达到超时时间。 5. **...

Global site tag (gtag.js) - Google Analytics