1.6和1.5最大的区别是支持泛型,编程比较方便
池的大小是初始化配置的,
在没有显式配置指定的情况下,
池大小默认为8.
可以通过GenericKeyedObjectPool.Config来配置。
下面给出2个例子,大家可以自行运行,或者跟贴留言,我来解答
根据key获取对象
package com.panguso.phl;
import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
import org.apache.commons.pool.impl.GenericKeyedObjectPool;
/**
1、复杂对象应该实现equals() 、hashCode()方法,以便不重复入池。
2、试图将null入池,不会成功的,但也不抛异常。
3、对于池对象,使用应该遵循“接而有还,再借不难”-----从池中获取,不用时候归池,否则当池中没有空闲可用的对象时候,程序会处于等待状态,如果没有显式的调用归还方法,则造成程序死锁。
* @author piaohailin
*
*/
public class TestGenericKeyedObjectPool {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
//创建一个对象池
GenericKeyedObjectPool<Integer, String> pool = new GenericKeyedObjectPool<Integer, String>(new BaseKeyedPoolableObjectFactory<Integer, String>() {
@Override
public String makeObject(Integer o) throws Exception {
return String.valueOf(o);
}
});
//清除最早的对象
pool.clearOldest();
//添加对象到池,重复的不会重复入池
for (int i = 0; i < 5; i++) {
pool.addObject(i);
}
//获取并输出对象
for (int i = 0; i < 10; i++) {
System.out.println(pool.borrowObject(i));
}
System.out.println("==========");
//输出池状态
System.out.println("pool.getMaxIdle()=" + pool.getMaxIdle());
System.out.println("pool.getMaxActive()=" + pool.getMaxActive());
}
}
无参获取对象
package com.panguso.phl;
import java.util.Random;
import org.apache.commons.pool.BasePoolableObjectFactory;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool.Config;
public class TestGenericObjectPool {
public static void main(String[] args) throws Exception {
Config config = new Config();
config.maxActive = 100;
config.maxWait = 3000; //设置这个,会抛Exception in thread "main" java.util.NoSuchElementException: Timeout waiting for idle object
GenericObjectPool<Float> pool = new GenericObjectPool<Float>(new BasePoolableObjectFactory<Float>() {
public Float makeObject() throws Exception {
return new Random().nextFloat();
}
}, config);
// for (int i = 0; i < 10000; i++) {
// pool.addObject();
// }
for (int i = 0; i < 10000; i++) {
System.out.println(System.currentTimeMillis());
Float f = pool.borrowObject();
System.out.println(f);
System.out.println(System.currentTimeMillis());
}
Float f = pool.borrowObject();
System.out.println(f);
pool.returnObject(f);
Float o1 = pool.borrowObject();
System.out.println(o1);
Float o2 = pool.borrowObject();
System.out.println(o2);
Float o3 = pool.borrowObject();
System.out.println(o3);
Float o4 = pool.borrowObject();
System.out.println(o4);
Float o5 = pool.borrowObject();
System.out.println(o5);
Float o6 = pool.borrowObject();
System.out.println(o6);
Float o7 = pool.borrowObject();
System.out.println(o7);
Float o8 = pool.borrowObject();
System.out.println(o8);
pool.returnObject(o1);
pool.returnObject(o2);
pool.returnObject(o3);
pool.returnObject(o4);
pool.returnObject(o5);
pool.returnObject(o6);
pool.returnObject(o7);
pool.returnObject(o8);
Float o9 = pool.borrowObject();
System.out.println(o9);
pool.returnObject(o9);
Float o10 = pool.borrowObject();
System.out.println(o10);
pool.returnObject(o10);
Float o11 = pool.borrowObject();
System.out.println(o11);
pool.returnObject(o11);
Float o12 = pool.borrowObject();
System.out.println(o12);
pool.returnObject(o12);
Float o13 = pool.borrowObject();
System.out.println(o13);
pool.returnObject(o13);
}
}
分享到:
相关推荐
commons-pool.jar1.6.0版
commons-pool-1.3.jar commons-net-3.0.jar commons-logging-api-1.1.jar commons-logging-1.0.4.jar commons-lang-2.1.jar commons-io-1.3.2.jar commons-httpclient-3.0.jar commons-fileupload-1.2.1.jar commons...
quartz-1.6.0.jar 集成了quartz发现不执行job,也没有错误信息,搞了半天缺少依赖包 commons-beanutils.jar commons-collections-3.1.jar commons-dbcp-1.2.1.jar ...commons-pool-1.2.jar commons-validator-1.1.4.jar
commons-pool2-2.3.jar,jedis-2.8.0.jar,spring-data-redis-1.6.0.RELEASE.jar,spring-session-1.1.1.RELEASE.jar,Spring-data-redis(Version 1.6.0.RC1)中文版.pdf
commons-pool-1.6.jar DataCenter-util-0.0.1-20161202.072205-3.jar DmDialect-for-hibernate4.0-jdk1.6.jar dom4j-1.6.1.jar elasticache-java-cluster-client-1.0.61.0.jar ezmorph-1.0.6.jar freemarker-...
`commons-pool.jar`是Apache Commons Pool,它是Java对象池设计模式的一个实现。对象池可以避免频繁创建和销毁对象带来的开销,提高系统性能。在DBCP中,这个库被用来实现数据库连接的池化管理。它提供了对象池的...
里面包含了redis需要的服务端包reids-3.2.9.tar.gz,commons-pool2-2.2.4.2.jar,jedis-2.9.0.jar,spring-data-redis-1.6.0.RELEASE.jar
6. **commons-pool-1.5.4.jar**:Apache Commons Pool是对象池设计模式的实现,与DBCP一起工作,用于管理数据库连接的池化。 7. **slf4j-api-1.6.0.jar**:Simple Logging Facade for Java (SLF4J) 是一个日志抽象...
- `commons-pool-1.5.5.jar`:Apache Commons Pool是对象池设计模式的实现,用于高效管理可重用资源,如数据库连接池中的连接。 - `java_memcached-release_2.6.3.jar`:这是Java Memcached客户端的主要库,包含...
commons-dbcp.jar commons-pool-1.2.jar DBCP数据库连接池 cglib-nodep-2.1_3.jar CGLIB是一个强大的高质量高性能的代码生成库,在运行时可以用它来扩展Java类 jfreechart-1.0.12.jar 使用java生成图表的工具 ...
这些`jar`包通常依赖于`commons-collections.jar`和`commons-pool-1.2.jar`。 #### 二、利用Hibernate进行对象关系映射 Hibernate是一个流行的ORM(Object-Relational Mapping)框架,它能够将Java对象映射到...
commons-pool2-2.3.jar tomcat-redis-session-manager-jre7-tomcat6.jar smartcard中的代码需要修改,redis放值时不能为空 //保存sysOrg中工号所属地市区县 Struts2Utils.getSession().setAttribute(Constants....