java对象池的操作(与大家分享下)
import org.apache.commons.pool.PoolableObjectFactory;
public class ObjectPoolFactoryDome implements PoolableObjectFactory {
public void activateObject(Object arg0) throws Exception {
System.err.println("激活对象:" + arg0);
}
public void destroyObject(Object arg0) throws Exception {
System.err.println("销毁: " + arg0);
}
public Object makeObject() throws Exception {
List li=new ArrayList();
li.add(0, "1");
System.err.println("添加对象: " + li);
return li;
}
public void passivateObject(Object arg0) throws Exception {
System.err.println("挂起对象: " + arg0);
}
public boolean validateObject(Object arg0) {
boolean result = (Math.random() > 0.5);
System.err.println("校验一个具体的对象是否仍然有效: "+ arg0 + " : " + result);
return result;
}
}
public static void main(String[] args) {
List obj = null;
PoolableObjectFactory factory = new ObjectPoolFactoryDome();//通过PoolableObjectFactory接口的实例ObjectPoolFactoryDome获得一个池工厂;
ObjectPoolFactory poolFactory = new StackObjectPoolFactory(factory);//用池工厂作为参数通过StackObjectPoolFactory实例得到一个池对象
ObjectPool pool = poolFactory.createPool();//创建池对象
try {
obj = (List)pool.borrowObject();//借出对象
System.out.println("从对象池中取出对象:"+obj.get(0));
System.out.println("返回已经从此对象池中借出的对象的总数:"+pool.getNumActive());
System.out.println("返回当前在此对象池中休眠的对象的数目:"+pool.getNumIdle());
pool.returnObject(obj);//归还对象的同时会调用挂起方法,将对对象处于挂起状态;
obj = null;//明确地设为null,作为对象已归还的标志
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try{
if (obj != null) {//避免将一个对象归还两次
pool.returnObject(obj);//归还对象
}else{
pool.close();//在归还了的情况下关闭当前对象池(销毁)
System.out.println("对象已销毁");
}
}
catch (Exception e){
e.printStackTrace();
}
}
}