You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.2 KiB

package com.highcharts.export.pool;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
public class BlockingQueuePool<T> extends AbstractPool<T>{
LinkedBlockingQueue<T> linkQueue;
/**
* @param factory
* @param number
* @throws PoolException
*/
public BlockingQueuePool(ObjectFactory<T> factory, int number, int maxWait, long retentionTime) throws PoolException {
super(factory, number, maxWait, retentionTime);
queue = new LinkedBlockingQueue<T>();
linkQueue = (LinkedBlockingQueue<T>) queue;
}
@Override
public T borrowObject() throws InterruptedException, PoolException {
T object = linkQueue.poll(maxWait, TimeUnit.MILLISECONDS);
if (object == null) {
throw new PoolException();
}
poolSize.getAndDecrement();
return object;
}
@Override
public void returnObject(T object, boolean validate) throws InterruptedException {
if (object == null) {
return;
}
boolean valid = ( !validate || objectFactory.validate(object)) ? true : false;
if (!valid) {
destroyObject(object);
} else {
objectFactory.passivate(object);
linkQueue.offer(object, maxWait, TimeUnit.MILLISECONDS);
poolSize.incrementAndGet();
}
}
}