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
相关推荐
redis和java操作redis的所有资源redis3.2+jedis2.8.jar+common-pool2.jar+common-pool2-source.rar
赠送jar包:commons-pool2-2.0.jar; 赠送原API文档:commons-pool2-2.0-javadoc.jar; 赠送源代码:commons-pool2-2.0-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.0.pom; 包含翻译后的API文档:...
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
commons-dbcp-1.4 jar java连接池. .commons-dbcp 是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:
赠送jar包:commons-pool2-2.5.0.jar; 赠送原API文档:commons-pool2-2.5.0-javadoc.jar; 赠送源代码:commons-pool2-2.5.0-sources.jar; 包含翻译后的API文档:commons-pool2-2.5.0-javadoc-API文档-中文...
maven库使用最多的2.9.0 Jedis 和对应的common-pool2.jar
需要使用Redis连接池的话,还需commons-pool包,提供了强大的功能,包含最新的jar包
commons-pool2-2.3.jar commons-pool2.jar是一个十分常用的jar文件,commons-pool2.jar文件适用于java开发中的与连接池进行连接部分使用,如果您缺少这个jar文件马上下载commons-pool2.jar吧
common-pool的eclipse源码+例子,可以直接导入到eclipse中运行,例子的代码放在src/main/java mh.test中,注意eclipse的jre版本不要用1.8,那样会出现duplicate method的错误!
go-commons-pool, 用于golang的通用对象池 共享池 go公共池是用于 Golang的通用对象池,直接从 Apache公共池重写。特性支持自定义 PooledObjectFactory 。Rich pool配置选项,可以精确控制池对象生命周期。 请参见 ...
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
赠送jar包:common-image-3.1.1.jar; 赠送原API文档:common-image-3.1.1-javadoc.jar; 赠送源代码:common-image-3.1.1-sources.jar; 赠送Maven依赖信息文件:common-image-3.1.1.pom; 包含翻译后的API文档:...
commons-dbcp-1.4.jar和commons-pool-1.4.jar
数据源和连接池的jar包 commons-dbcp-1.2.2.jar commons-pool-1.3.jar
Jedis 连接池必须要用的一个pool2 jar包,以往的pool是不行的,怎么不能免费下载了啊
赠送jar包:flink-table-common-1.12.7.jar; 赠送原API文档:flink-table-common-1.12.7-javadoc.jar; 赠送源代码:flink-table-common-1.12.7-sources.jar; 赠送Maven依赖信息文件:flink-table-common-1.12.7....
jedis 2.9jar包括源代码及common-pool 下面是官方地址,不用积分: https://github.com/xetorthio/jedis http://mvnrepository.com/artifact/redis.clients/jedis/2.9.0
赠送jar包:activiti-common-rest-5.21.0.jar; 赠送原API文档:activiti-common-rest-5.21.0-javadoc.jar; 赠送源代码:activiti-common-rest-5.21.0-sources.jar; 赠送Maven依赖信息文件:activiti-common-rest-...
jedis和对应的pool,jedis是2.7版 pool是2.3版,使用的时候 解压使用里面的jar包
赠送jar包:proto-google-common-protos-1.17.0.jar; 赠送原API文档:proto-google-common-protos-1.17.0-javadoc.jar; 赠送源代码:proto-google-common-protos-1.17.0-sources.jar; 赠送Maven依赖信息文件:...