对象复用池()
SoftReferenceObjectPool:它使用ArrayList保存对象但是SoftReferenceObjectPool并不直接保存对象的强引用而是保存对象的软引用它使用如下方法向池中加入新对象
_pooladd(new SoftReference<T>(obj refQueue))
SoftReferenceObjectPool对对象的数量没有限制当对象池没有可用对象时borrowObject()方法会创建新的对象当内存紧张时JVM可以自动回收具有软引用的对象
以下代码显示了一个简单的对象池工厂
public class PoolableObjectFactoryDemo implements PoolableObjectFactory {
private static AtomicInteger counter = new AtomicInteger()
public Object makeObject() throws Exception { //创建对象
Object obj = StringvalueOf(countergetAndIncrement())
Systemoutprintln(Create Object + obj)
return obj;
}
public void activateObject(Object obj) throws Exception {
Systemoutprintln(Before borrow + obj)//在取出前被调用
}
public void passivateObject(Object obj) throws Exception {
Systemoutprintln(return +obj) //当对象返回池中时被调用
}
public boolean validateObject(Object obj) {
return true;
}
public void destroyObject(Object obj) throws Exception {
Systemoutprintln(Destroying Object + obj)
}
}
对象池的使用例子如下
[] []