class BlockingQueuePool implements ObjectPool<T> {

    @Override
    public T borrowObject() {
        final T existing = queue.poll();
        if (existing != null) {
            return existing;
        }

        return creationFunction.get();
    }

    public  BlockingQueuePool(final int maxSize, final Supplier<T> creationFunction, final Predicate<T> reuseCheck, final Consumer<T> returnPreparation);

}