public T lease() {
        T obj = objects.poll();
        return obj != null ? obj : create();
    }
Very basic object pool implementation.
It uses a deque to store objects. Leased objects are removed from the
deque and released objects are added back to the deque. When there is no objects in the deque,
a new object is created (assuming it will be returned on release).

@param <T>
examples/demo-service/src/main/java/com/clickhouse/demo_service/BasicObjectsPool.java