
se.ugli.java.util.BlockingQueuePool Maven / Gradle / Ivy
package se.ugli.java.util;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class BlockingQueuePool implements Pool {
private final BlockingQueue queue;
private final long checkoutTimeout;
private final TimeUnit checkoutTimeoutUnit;
private BlockingQueuePool(BlockingQueue queue, Supplier objectFactory, long checkoutTimeout, TimeUnit checkoutTimeoutUnit) {
this.queue = queue;
this.checkoutTimeout = checkoutTimeout;
this.checkoutTimeoutUnit = checkoutTimeoutUnit;
while (queue.remainingCapacity() > 0)
queue.offer(objectFactory.get());
}
@Override
public void borrow(Consumer borrower) {
try {
T loan = queue.poll(checkoutTimeout, checkoutTimeoutUnit);
borrower.accept(loan);
queue.offer(loan);
} catch (InterruptedException e) {
throw new PoolException(e);
}
}
@Override
public void close() {
while (!queue.isEmpty()) {
T t = queue.poll();
if (t instanceof AutoCloseable) {
AutoCloseable c = (AutoCloseable) t;
try {
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy