566
社区成员
发帖
与我相关
我的任务
分享
protected long expirationTime = -1;
protected int minCapacity, maxCapacity;
protected HashMap<Resource<R, T>, Long> lockedMap, unLockedMap;
protected AtomicLong totalNumActive = new AtomicLong(0);
public abstract void init();
protected abstract Resource<R, T> create();
protected abstract void expire(Resource<R, T> res);
protected abstract boolean validate(Resource<R, T> res);
public abstract long getCurrentNumActvie();
public abstract long getTotalNumActive();
public abstract long getNumIdle();
public abstract void close();
public abstract void destroy();
public synchronized Resource<?,?> checkOut() {
long now = System.currentTimeMillis();
Resource<R, T> resource = null;
if (unLockedMap.size() > 0) {
Iterator<Resource<R, T>> keyIterator = unLockedMap.keySet().iterator();
while (keyIterator.hasNext()) {
resource = keyIterator.next();
if ((now - unLockedMap.get(resource)) > expirationTime) {
//object has expired
unLockedMap.remove(resource);
expire(resource);
resource = null;
} else {
if (validate(resource)) {
unLockedMap.remove(resource);
lockedMap.put(resource, new Long(now));
return resource;
} else {
// object failed validation
unLockedMap.remove(resource);
expire(resource);
resource = null;
}
}
}
}
// no objects available, create a new one
resource = create();
lockedMap.put(resource, new Long(now));
return resource;
}
public synchronized void checkIn(Resource<R, T> res) {
lockedMap.remove(res);
unLockedMap.put(res, new Long(System.currentTimeMillis()));
}