📄 abstractobjectpool.java
字号:
//实例池的父类
package pool;
import java.util.*;
public abstract class AbstractObjectPool implements Pool
{
//资源池的上下阀值
protected int minPoolSize = 100;
protected int maxPoolSize =500;
//命中和未命中次数
private static int bingocnt = 0;
private static int unBingocnt = 0;
//资源容器
private ArrayList freePooledObjects = new ArrayList();
protected ArrayList usedPooledObjects = new ArrayList();
private ArrayList inUsedObjects = new ArrayList();
//资源池对象工厂
protected PoolObjectFactory pof = null;
//策略对象集
private SelectorStrategy s;
public AbstractObjectPool(SelectorStrategy s)
{
pof = new PoolObjectFactory();
for (int i = 0; i < minPoolSize; i++)
{
freePooledObjects.add(pof.newInstance());
}
this.s = s;
}
/**
* 获取资源
*/
public synchronized Object checkOut(String id)
{
Object o;
if( usedPooledObjects.size() > 0)
{
Iterator it = usedPooledObjects.iterator();
while( it.hasNext() )
{
o = it.next();
if( validate( o,id ) )
{
usedPooledObjects.remove( o );
inUsedObjects.add( o );
bingocnt++;
return( o );
}
}
}
if(freePooledObjects.size() > 0)
{
o = ((SelectorStrategy)s).select(freePooledObjects);
freePooledObjects.remove(o);
inUsedObjects.add( o );
unBingocnt++;
return o;
}
if((usedPooledObjects.size()+inUsedObjects.size())<maxPoolSize)
{
o = create();
inUsedObjects.add( o );
unBingocnt++;
return( o );
}
return null;
}
/**
* 释放资源
*/
public synchronized void checkIn(Object o) {
// TODO Auto-generated method stub
//System.out.println(o.getClass());
inUsedObjects.remove( o );
usedPooledObjects.add( o );
}
public abstract Object create();
public abstract boolean validate( Object o ,String id);
public void expire()
{
usedPooledObjects.clear();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -