
nf.fr.eraasoft.pool.impl.BlockingQueueObjectPool Maven / Gradle / Ivy
The newest version!
package nf.fr.eraasoft.pool.impl;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import nf.fr.eraasoft.pool.PoolException;
import nf.fr.eraasoft.pool.PoolSettings;
import nf.fr.eraasoft.pool.PoolableObject;
/**
*
* Object pool implementation based on LinkedBlockingQueue
* Use PoolSettings class to obtain an instance of this class
*
* @see PoolSettings
*
* @author eddie
*
* @param
*/
public abstract class BlockingQueueObjectPool extends AbstractPool {
LinkedBlockingQueue linkQueue;
public BlockingQueueObjectPool(final PoolableObject poolableObject, final PoolSettings settings) {
super(poolableObject,settings);
queue = new LinkedBlockingQueue();
linkQueue = (LinkedBlockingQueue) queue;
try {
init();
} catch (PoolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public T getObj() throws PoolException {
if (queue.size() == 0 && totalSize.get() < settings.max()) {
create();
}
T t = null;
try {
t = linkQueue.poll(settings.maxWait(), TimeUnit.SECONDS);
poolableObject.activate(t);
} catch (InterruptedException e) {
throw new PoolException(e);
}
return t;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy