⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractobjectpool.java

📁 基于corba的资源池,实现了实例池供客户端调用,并且实例池对实例的分配采用策略模式支持随即抽取,最近使用和循环抽取三个不同策略.(在visibroke下面开发的)
💻 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 + -