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
相关推荐
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 ...
**CommonPoolDemo22示例代码解析:** 这个示例代码通常会展示如何创建一个基于Apache Commons Pool2的对象池,以及如何进行对象的获取、使用和返回。以下是一般的步骤: 1. **创建PooledObjectFactory**: 首先,你...
《深入解析Apache Commons DBCP 1.4》 Apache Commons DBCP(Database Connection Pool)是Apache软件基金会开发的一个数据库连接池组件,它在Java应用程序中提供了数据库连接的池化管理。在Java环境中,DBCP是实现...
Commons-Digester 是一个 XML-Java对象的映射工具,用于解析 XML配置文件. Discovery Commons-Discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。. EL Commons-EL 提供在...
这个压缩包包含了多个必要的库文件和文档,包括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和...
- **c3p0连接池**:一种开源的JDBC连接池,通过`hibernate.connection.pool_size`属性配置连接池大小。 - **Proxool连接池**:轻量级的JDBC连接管理器,通过`hibernate.connection.datasource`配置数据源。 - **...
此外,为了数据库连接池和XML解析,还需要添加Common-dbcp、Common-pool、Dom4j和Common-collections等包。 完成上述步骤后,需要修改web.xml文件,配置Struts2的前端控制器DispatcherServlet,同时添加struts....
- **commons-dbcp.jar**与**commons-pool.jar**:数据库连接池组件,提高数据库访问效率。 3. **Struts2.1.6** - **struts2-core-2.1.6.jar**与**xwork-2.1.2.jar**:Struts2的核心组件,提供MVC架构支持。 - **...
8. **文本解析与生成**:`CSV` 和 `Parser` 包可以处理CSV格式的数据,`BeanUtils` 可以将Java Bean属性与XML或其他格式相互转换。 9. **对象池**:`Pool` 包提供对象池化服务,用于管理和复用昂贵资源,提高系统...
3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5.aspectjweaver.jar(支持AOP的包) 6.cglib-nodep-2.1_3.jar(支持cglib动态代理的包) 如果用BasicDataSource来配置数据库连接,还要...
3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5.aspectjweaver.jar(支持AOP的包) 6.cglib-nodep-2.1_3.jar(支持cglib动态代理的包) 如果用BasicDataSource来配置数据库连接,还要...
3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5.aspectjweaver.jar(支持AOP的包) 6.cglib-nodep-2.1_3.jar(支持cglib动态代理的包) 如果用BasicDataSource来配置数据库连接,还要...
7. **commons-pool.jar**:Apache Commons Pool是对象池化的库,它提供了通用的对象池服务。在Spring中,与DBCP结合使用,用于管理数据库连接池。 8. **commons-logging.jar**:Apache Commons Logging是一个轻量级...
尽量使用ForkJoinPool.commonPool()来获取默认的线程池,以减少资源消耗。 合理设置任务的分解阈值,以避免过度分解导致的性能下降。 避免在RecursiveTask内部使用ForkJoinPool的invoke方法,而应该直接调用compute...
8. **commons-fileupload-1.2.2.jar**:Apache Commons FileUpload库专门用于处理HTTP请求中的文件上传,提供了一个简单且灵活的API来解析上传的文件,是Web应用中处理文件上传的标准工具。 这些Apache Commons库在...
ibatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 #### 二、ibatis配置文件解析 ibatis的核心配置文件是`SqlMapConfig.xml...
Tomcat 7.0.8的源码分为多个模块,如`common`、`catalina`、`coyote`、`jdbc-pool`等,每个模块都有特定的职责。例如,`catalina`模块负责核心服务器逻辑,`coyote`处理HTTP/1.1协议,而`jdbc-pool`则提供了数据库...
- `commons-pool.jar`:Apache Commons Pool是对象池服务,DBCP依赖它来实现数据库连接池。 - `commons-logging.jar`:Apache Commons Logging是一个日志抽象层,允许你在应用中轻松切换不同的日志实现。 综合这些...
Tomcat源代码主要分为几个关键部分:`catalina`(核心引擎)、`coyote`(HTTP/HTTPS协议处理)、`jasper`(JSP编译器)、`naming`(JNDI服务)、`jdbc-pool`(数据库连接池)和`common`、`server`、`shared`三个...