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

📄 abstractconnectpool.java

📁 基于corba的资源池,实现了实例池供客户端调用,并且实例池对实例的分配采用策略模式支持随即抽取,最近使用和循环抽取三个不同策略.(在visibroke下面开发的)
💻 JAVA
字号:
//数据库连接池的父类
package database;

import java.util.*;

public abstract class AbstractConnectPool implements pool.Pool
{
	private long expirationTime;   
	protected Hashtable locked, unlocked; 
	protected int min,max;

	public AbstractConnectPool()
	{
		expirationTime = 30000; // 30 seconds
		locked = new Hashtable();         
		unlocked = new Hashtable();
		min = 2;
		max = 10;
	}
	
	public abstract Object create();
	public abstract boolean validate( Object o );
	public abstract void expire( Object o );

	public synchronized Object checkOut(String id)
	{
		long now = System.currentTimeMillis();
		Object o;        
		if( unlocked.size() > 0 )
		{
			Enumeration e = unlocked.keys();  
			while( e.hasMoreElements() )
			{
				o = e.nextElement();                      
				if( ( now - ( ( Long ) unlocked.get( o ) ).longValue() ) > expirationTime )
				{
					// object has expired
					unlocked.remove( o );
					expire( o );
					o = null;
				}
				else
				{
					if( validate( o ) )
					{
						unlocked.remove( o );
						locked.put( o, new Long( now ) );                
						return( o );
					}
					else
					{
						// object failed validation
						unlocked.remove( o );
						expire( o );
						o = null;
					}
				}
			}
		}        
		// no objects available, create a new one
		if(unlocked.size()<max)
		{
			o = create();        
			locked.put(o, new Long(now)); 
			return( o );
		}
		return null;

	}

	public synchronized void checkIn( Object o )
	{
		locked.remove( o );
		unlocked.put( o, new Long( System.currentTimeMillis() ) );
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -