所以我有一个我正在使用的通用池,我想知道初始化时实际发生了什么?它是否正在创建一个教师并将其传递给池使用,如果是这样,它有什么成本呢?
final Pool<Teacher> pool = new Teacher();
注意:Pool是一个抽象类&amp;老师延伸池 提前致谢!
这是Pool Class:
public abstract class ObjectPool<T> {
private long expirationTime;
private Hashtable<T, Long> locked, unlocked;
public ObjectPool() {
expirationTime = 30000; // 30 seconds
locked = new Hashtable<T, Long>();
unlocked = new Hashtable<T, Long>();
}
protected abstract T create();
public abstract boolean validate(T o);
public abstract void expire(T o);
public synchronized T checkOut() {
long now = System.currentTimeMillis();
T t;
if (unlocked.size() > 0) {
Enumeration<T> e = unlocked.keys();
while (e.hasMoreElements()) {
t = e.nextElement();
if ((now - unlocked.get(t)) > expirationTime) {
// object has expired
unlocked.remove(t);
expire(t);
t = null;
} else {
if (validate(t)) {
unlocked.remove(t);
locked.put(t, now);
return (t);
} else {
// object failed validation
unlocked.remove(t);
expire(t);
t = null;
}
}
}
}
// no objects available, create a new one
t = create();
locked.put(t, now);
return (t);
}
public synchronized void checkIn(T t) {
locked.remove(t);
unlocked.put(t, System.currentTimeMillis());
}
}
答案 0 :(得分:2)
假设Pool
是用于存储对象的数据结构,您可能希望初始化Pool
而不是
final Pool<Teacher> pool = new Pool<>();
如果你有一个老师必须扩展的游泳池,那似乎有点尴尬和不必要。
编辑:
根据您更新的问题,我会说将该类分成一个池(管理器)类,以及池对象将实现的接口。那么对于你的泛型类:
public class Pool<T extends PoolObject> {//...
从那里,你可以使用通用的PoolObjects,老师不会直接实现/扩展池。