jdk内部对象池有三个,接口为ObjectPool
GenericObjectPool
StackObjectPool
SoftReferenceObjectPool
带有可以的对象池
StackKeyObjectPool
GenericKeyObjectPool
对应对象池的对象池工厂,接口为PoolableObjectPool
BasePoolableObjectFactory 基本对象池方法
package com.test.objPool;
import java.util.NoSuchElementException;
import org.apache.tomcat.dbcp.pool.ObjectPool;
import org.apache.tomcat.dbcp.pool.impl.StackObjectPool;
import com.test.objPool.ObjectPoolableFactory.oneObject;
public class TestForObjPool {
public static void main(String[] args)
{
ObjectPool pool = new StackObjectPool(new ObjectPoolableFactory());
try {
for(int i=0;i<10;i++)
{
oneObject user = (oneObject)pool.borrowObject();
user.name = "Borned";
user.sayMyName();
oneObject user2 = (oneObject)pool.borrowObject();
user2.name="Borned2222";
user2.sayMyName();
pool.returnObject(user);
oneObject user3 = (oneObject)pool.borrowObject();
user3.name="Borned3333";
user3.sayMyName();
pool.returnObject(user2);
pool.returnObject(user3);
}
} catch (NoSuchElementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.test.objPool;
import org.apache.tomcat.dbcp.pool.BasePoolableObjectFactory;
public class ObjectPoolableFactory extends BasePoolableObjectFactory{
int i=0;
@Override
public Object makeObject() throws Exception {
// TODO Auto-generated method stub
System.out.println("===================="+i);
return new oneObject();
}
public void passivateObject(Object one)
{
oneObject oObj = (oneObject)one;
oObj.clear();
}
class oneObject
{
int num = ++i;
String name = "";
void sayMyName()
{
System.out.println(i+" "+num+"((((((((("+name+")))))))))");
}
public oneObject()
{
System.out.println("--start---generate a object");
System.out.println(num);
System.out.println("--end----------------------");
}
public void clear()
{
name = "";
System.out.println("%%%%%%%retrive%%%%%%%%%%");
}
}
}