abstractconnectpool.java

来自「基于corba的资源池,实现了实例池供客户端调用,并且实例池对实例的分配采用策略」· Java 代码 · 共 79 行

JAVA
79
字号
//数据库连接池的父类
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 + =
减小字号Ctrl + -
显示快捷键?