`

common-pool简单解析

    博客分类:
  • java
阅读更多

apache common-pool的简单解析,以来了解对象池中运行原理

1.pool的一个简单操作实例(后附)

2.对象池概要:

  主要为对象池ObjectPool,对象池工厂ObjectPoolFactory(产生对象池,可根据不然参数构造create(...)),池对象 poolobject(即需要复用的对象),池对象工厂PoolableObjectFactory(池对象的定义,如类别,key)

 

3.common-pool中的各种类的区分解析

对象池:

按照数据结构划分:

GenericObjectPool,GenericKeyedObjectPool,内部数据结构为LinkedList,访问速度块,但是随即访问欠缺,且使用同步控制保证线程安全;

StatckObjectPool,keyedStatckobjectPool内部容器为statck,先入后出,且使用同步控制保证线程安全;

SoftreferenceObjectpool,内容容器为Arraylist,初始化全部对象,软引用依旧不能被jvm回收,缓存效果好,且使用同步控制保证线程安全;

按照KEY划分:

非key:GenericObjectPool,StatckObjectPool,SoftreferenceObjectpool,主要为产生同一类别的复用对象

key:GenericKeyedObjectPool,keyedStatckobjectPool,可以产生多个类别的复用对象

实现原理:

为 在池对象中使用不同与poolableobjectfactory的keypoolableobjectfactory,表现在方法中 makeobject(object o)带参数,然后在于如genericobjectpool中borrowobject()方法中调用makeobject(o)根据不同key来进行存 储于hashMap-->(key,linkedlist)

池对象工厂:

PoolableObjectFactory->basePoolableObjectFactory

keyedPoolableObjectFactory->baseKeyedPoolableObjectFactory

对象池:

objectpool->baseobjectpool->3种具体实现

keyedobjectpool->keyedbaseobjectpool->2种具体实现

操作为borrowobject,returnobject。clear

各种容器实现方式操作也不一样

arraylist一次全部初始化,构建全部对象,使用坐标来进行获取与归还

linkedlist,addlast,removefirst

stack:pop,push

后两者存储对象在returnobject中归还存储,borrowobject中调用makeobject给外界使用,但不立刻存储在容器中,并且池对象并不是以原始对象存储,需要经过GenericKeyedObjectPool.ObjectTimestampPair装饰一下,以.value返回存储

 

 

对象池工厂:5中对象池.create(...)构造

4.common-pool下载地址 http://pan.baidu.com/s/1kT8zjcr

建议对象池不要使用过多,容易造成入不敷出的情况,可以使用缓存,虽说对象池为缓存实现的一个模块

package pools;

import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.PoolableObjectFactory;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.springframework.util.DigestUtils;

public class TestObject {
    public static void main(String args[]) {
        
        PoolableObjectFactory fac=new TestFactory();
        
        ObjectPool pool=new GenericObjectPool(fac);
        
        try{
            User user=(User) pool.borrowObject();
            user.setUsername("yaoge");
            user.setUserpass("share");
            user.print_info();
            pool.returnObject(user);
            
            User user1=(User) pool.borrowObject();
            user1.print_info();
            pool.returnObject(user1);
            
            
        }
        catch(Exception e) {
            System.err.println(e.toString());
        }
        
        
        
    }
}

package pools;

import org.apache.commons.pool.PoolableObjectFactory;

public class TestFactory implements PoolableObjectFactory{

    @Override
    public void activateObject(Object arg0) throws Exception {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void destroyObject(Object arg0) throws Exception {
        // TODO Auto-generated method stub
        
    }

    @Override
    public Object makeObject() throws Exception {
        // TODO Auto-generated method stub
        Object o=new User();
        return o;
    }

    @Override
    public void passivateObject(Object arg0) throws Exception {
        // TODO Auto-generated method stub
        
    }

    @Override
    public boolean validateObject(Object arg0) {
        // TODO Auto-generated method stub
        return false;
    }

}

package pools;

public class User {
    private String username;
    private String userpass;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUserpass() {
        return userpass;
    }
    public void setUserpass(String userpass) {
        this.userpass = userpass;
    }
    public void print_info(){
        System.out.println(getUsername()+":"+getUserpass());
    }
}

 

参考博客 http://macrochen.iteye.com/blog/320077

 

来源:http://www.sharefly.org:8080/blog

 

分享到:
评论

相关推荐

    GlusterFS 之内存池(mem-pool)实现原理及代码详解

    mem_pool = GF_CALLOC(sizeof(*mem_pool), 1, gf_common_mt_mem_pool); if (!mem_pool) return NULL; // 初始化内存池对象的各个字段 ret = gf_asprintf(&mem_pool->name, "%s:%s", THIS->name, name); if ...

    CommonPool2Demo

    **CommonPoolDemo22示例代码解析:** 这个示例代码通常会展示如何创建一个基于Apache Commons Pool2的对象池,以及如何进行对象的获取、使用和返回。以下是一般的步骤: 1. **创建PooledObjectFactory**: 首先,你...

    common-sdbcp1.4.jar_itmop.com.zip

    《深入解析Apache Commons DBCP 1.4》 Apache Commons DBCP(Database Connection Pool)是Apache软件基金会开发的一个数据库连接池组件,它在Java应用程序中提供了数据库连接的池化管理。在Java环境中,DBCP是实现...

    apache-commons源码及jar文件

    Commons-Digester 是一个 XML-Java对象的映射工具,用于解析 XML配置文件. Discovery Commons-Discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。. EL Commons-EL 提供在...

    geoserver-2.16.4-arcsde-plugin.zip

    这个压缩包包含了多个必要的库文件和文档,包括icu4j-3.4.4.jar、gt-arcsde-22.4.jar、jsqlparser-0.3.14.jar、commons-pool-1.5.4.jar、gt-arcsde-common-22.4.jar、gs-arcsde-2.16.4.jar,以及arcsde-README.txt和...

    Hibernate开发向导

    - **c3p0连接池**:一种开源的JDBC连接池,通过`hibernate.connection.pool_size`属性配置连接池大小。 - **Proxool连接池**:轻量级的JDBC连接管理器,通过`hibernate.connection.datasource`配置数据源。 - **...

    在MyEclipse中实现Struts2 Spring Hibernate三个框架的集成

    此外,为了数据库连接池和XML解析,还需要添加Common-dbcp、Common-pool、Dom4j和Common-collections等包。 完成上述步骤后,需要修改web.xml文件,配置Struts2的前端控制器DispatcherServlet,同时添加struts....

    ssh综合配置文件

    - **commons-dbcp.jar**与**commons-pool.jar**:数据库连接池组件,提高数据库访问效率。 3. **Struts2.1.6** - **struts2-core-2.1.6.jar**与**xwork-2.1.2.jar**:Struts2的核心组件,提供MVC架构支持。 - **...

    apache common系列包的作用以及帮助文档

    8. **文本解析与生成**:`CSV` 和 `Parser` 包可以处理CSV格式的数据,`BeanUtils` 可以将Java Bean属性与XML或其他格式相互转换。 9. **对象池**:`Pool` 包提供对象池化服务,用于管理和复用昂贵资源,提高系统...

    web项目常用jar包及说明.zip

    3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5.aspectjweaver.jar(支持AOP的包) 6.cglib-nodep-2.1_3.jar(支持cglib动态代理的包) 如果用BasicDataSource来配置数据库连接,还要...

    SSH 框架所需JAR包

    3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5.aspectjweaver.jar(支持AOP的包) 6.cglib-nodep-2.1_3.jar(支持cglib动态代理的包) 如果用BasicDataSource来配置数据库连接,还要...

    SSH 项目 整合jar包

    3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5.aspectjweaver.jar(支持AOP的包) 6.cglib-nodep-2.1_3.jar(支持cglib动态代理的包) 如果用BasicDataSource来配置数据库连接,还要...

    spring2.5jar包.zip

    7. **commons-pool.jar**:Apache Commons Pool是对象池化的库,它提供了通用的对象池服务。在Spring中,与DBCP结合使用,用于管理数据库连接池。 8. **commons-logging.jar**:Apache Commons Logging是一个轻量级...

    Java中的Fork,Join框架深度解析

    尽量使用ForkJoinPool.commonPool()来获取默认的线程池,以减少资源消耗。 合理设置任务的分解阈值,以避免过度分解导致的性能下降。 避免在RecursiveTask内部使用ForkJoinPool的invoke方法,而应该直接调用compute...

    java项目commons jar包

    8. **commons-fileupload-1.2.2.jar**:Apache Commons FileUpload库专门用于处理HTTP请求中的文件上传,提供了一个简单且灵活的API来解析上传的文件,是Web应用中处理文件上传的标准工具。 这些Apache Commons库在...

    ibatis 配置文件详解

    ibatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 #### 二、ibatis配置文件解析 ibatis的核心配置文件是`SqlMapConfig.xml...

    tomcat源码7.08

    Tomcat 7.0.8的源码分为多个模块,如`common`、`catalina`、`coyote`、`jdbc-pool`等,每个模块都有特定的职责。例如,`catalina`模块负责核心服务器逻辑,`coyote`处理HTTP/1.1协议,而`jdbc-pool`则提供了数据库...

    java json 操作 jar包 comm jar包

    - `commons-pool.jar`:Apache Commons Pool是对象池服务,DBCP依赖它来实现数据库连接池。 - `commons-logging.jar`:Apache Commons Logging是一个日志抽象层,允许你在应用中轻松切换不同的日志实现。 综合这些...

    tomcat 源代码

    Tomcat源代码主要分为几个关键部分:`catalina`(核心引擎)、`coyote`(HTTP/HTTPS协议处理)、`jasper`(JSP编译器)、`naming`(JNDI服务)、`jdbc-pool`(数据库连接池)和`common`、`server`、`shared`三个...

Global site tag (gtag.js) - Google Analytics