📄 resourcepool.java
字号:
package ServerImpl;
import java.util.*;
import ServerImpl.*;
import Bank.*;
public abstract class ResourcePool {
private long expirationTime,leaseTime;
private long lastCheckOut;
private ServerLog log;
protected Hashtable used;
protected Hashtable unused;
private Strategy strategy;
private cleanThread cleaner;
private releaseThread releaser;
ResourcePool(){
expirationTime = ( 1000 * 5);
leaseTime=( 300);
used = new Hashtable();
unused = new Hashtable();
lastCheckOut = System.currentTimeMillis();
strategy = getStrategy();
log=new ServerLog(ServerConfigure.GetStrategyType(),500);
cleaner = new cleanThread(this,10000);
releaser = new releaseThread(this,1000);
cleaner.start();
releaser.start();
this.hashCode();
}
abstract Object create(String id)throws Exception;
abstract void expire(Object o) throws Exception;
abstract Resource getResourceObject(Object o);
abstract int getMaxSize();
abstract Strategy getStrategy();
private int currentSize(){
return used.size()+unused.size();
}
public Object findResource(String id) throws UserNotExitsException,Exception{
Object obj;
obj = strategy.getObject(id,this);
if(obj!= null){
unused.remove(obj);
used.put(obj, getResourceObject(obj));
log.Record(true);
return obj;
}else{
log.Record(false);
if(currentSize()==getMaxSize())
Thread.sleep(2000);
if(currentSize()<getMaxSize())
{
obj = create(id);
used.put(obj,getResourceObject(obj));
}
return obj;
}
}
public void restoreResource(Object obj){
if( obj != null )
{
Resource rs = (Resource)used.remove(obj);
if(rs != null){
rs.setLastusedtime(System.currentTimeMillis());
unused.put( obj,rs );
}
}
}
public void clean(){
Object obj;
long now = System.currentTimeMillis();
Enumeration e;
e = unused.keys();
while( e.hasMoreElements() ){
obj = e.nextElement();
if( (now - ((Resource)unused.get(obj)).getLastusedtime()) > expirationTime ){
unused.remove( obj );
obj = null;
}
}
}
public void release(){
Enumeration e;
e = used.keys();
Object obj;
long now = System.currentTimeMillis();
while( e.hasMoreElements() ){
obj = e.nextElement();
if((now - ((Resource)used.get(obj)).getLastusedtime()) > leaseTime ){
try {
restoreResource(obj);
expire(obj);
} catch (Exception e1){
e1.printStackTrace();
}
}
}
}
public Hashtable getUsed(){
return used;
}
public Hashtable getUnused(){
return unused;
}
}
class cleanThread extends Thread{
private ResourcePool pool;
private long sleepTime;
cleanThread(ResourcePool pool,long sleepTime){
this.pool = pool;
this.sleepTime = sleepTime;
}
public void run(){
while(true){
try{
sleep(sleepTime);
}catch( InterruptedException e){
}
pool.clean();
}
}
}
class releaseThread extends Thread{
private ResourcePool pool;
private long sleepTime;
releaseThread(ResourcePool pool,long sleepTime){
this.pool = pool;
this.sleepTime = sleepTime;
}
public void run(){
while(true){
try{
sleep(sleepTime);
}catch(InterruptedException e ){
}
pool.release();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -