abstractpool.java

来自「distrubit account system for bank,」· Java 代码 · 共 81 行

JAVA
81
字号
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 + =
减小字号Ctrl + -
显示快捷键?