@SuppressWarnings("unchecked")
	public synchronized T obtain() {
		for (int i = 0; i < taken.length; i++)
			if (!taken[i]) {
				T obj = (T)pool[i];
				if (obj == null)
					obj = construct(i);
				taken[i] = true;
				if (fReset != null)
					fReset.f(obj);
				return obj;
			}
		int index = taken.length;
		T obj = construct(index);
		taken[index] = true;
		if (fReset != null)
			fReset.f(obj);
		return obj;
	}