@Override public synchronized void release(PooledObject obj, Key key) { if (m_destroyed) { return; } removeFromUse(obj, key); addToFree(obj, key); }
@Override public synchronized PooledObject acquire(Key key) { if (m_destroyed) { throw new IllegalStateException( "<acquire> is not allowed to be called after destruction of the pool! Key: " + key); } PooledObject pooledObj = getFromFree(key); return addToUse(pooledObj == null ? create(key) : pooledObj, key); }
private void destroy(Map<Key, ? extends List<PooledObject>> pool) { for (Key key : pool.keySet()) { for (PooledObject obj : pool.get(key)) { destroy(key, obj); } } }
private void addToFree(PooledObject obj, Key key) { LinkedList<PooledObject> freeObjs = m_free.get(key); if (freeObjs == null) { freeObjs = new LinkedList<PooledObject>(); m_free.put(key, freeObjs); } if (freeObjs.size() > m_cachedLimit) { destroy(key, obj); return; } freeObjs.addFirst(obj); LOG.trace("free are <{}> objects of type <{}>", freeObjs.size(), obj.getClass()); }