📄 abstractpool.java
字号:
package Pool;
import java.util.ArrayList;
import java.util.Vector;
/**
*@author hsp
*定义一个抽象的资源池
*/
public abstract class AbstractPool implements Pool {
/**
*定义资源池的大小
*/
private int defaultPoolSize = 300;
/**
*定义一个链表以存放备用资源
*/
private ArrayList freePooledObjects = new ArrayList();
/**
*定义一个链表以存放正在资源
*/
private ArrayList inusePooledObjects = new ArrayList();
/**
*定义一个AccountPooledObjectFactory类型的参数以获得对象引用
*/
private AccountPooledObjectFactory accountpooledObjectFactory;
/**
*构造方法
*/
public AbstractPool () {
accountpooledObjectFactory = new AccountPooledObjectFactory();
for (int i = 0; i < defaultPoolSize; i++) {
freePooledObjects.add(accountpooledObjectFactory.newInstance());
}
}
/**
*从备用资源里获得一个实例作为可用资源
*/
public synchronized Object getPooledObject() {
if (freePooledObjects.size() == 0) {
return null;
}
Object pooledObject = freePooledObjects.remove(0);
inusePooledObjects.add(pooledObject);
System.out.println("当前采用的实例在资源池里面的位置"+inusePooledObjects.indexOf(pooledObject));
return pooledObject;
}
/**
*@param pooledObject实例名称
*通过实例名称释放资源池里正在使用的实例
*/
public synchronized void releasePooledObject(Object pooledObject) {
System.out.println(inusePooledObjects.indexOf(pooledObject));
freePooledObjects.add(inusePooledObjects.remove(inusePooledObjects.indexOf(pooledObject)));
}
/**
*@param i 实例所在的位置
*通过实例所在的位置释放正在使用的实例
*/
public synchronized void releasePooledObjectById(int i) {
freePooledObjects.add(inusePooledObjects.remove(i));
}
/**
*获得资源池里备用的资源的容量
*/
public int getFreePoolLength() {
return freePooledObjects.size();
}
/**
*获得资源池里当前可以使用资源的容量
*/
public int getInusePoolLength() {
return inusePooledObjects.size();
}
/**
*@param i 实例在资源池里面的位置
*通过id获得资源池里面可以使用的实例
*/
public Object getPooledObjectById(int i) {
return inusePooledObjects.get(i);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -