📄 abstractconnectpool.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 + -