docs: @SuppressWarnings("PMD.GuardLogStatement")
      public W acquire() throws InterruptedException {
          // Stop draining, because we obviously need this kind of buffers
          Optional.ofNullable(idleTimer.getAndSet(null)).ifPresent(
              timer -> timer.cancel());
          if (createdBufs.get() < maximumBufs) {
              // Haven't reached maximum, so if no buffer is queued, create one.
              W buffer = queue.poll();
              if (buffer != null) {
                  buffer.lockBuffer();
                  return buffer;
              }
              return createBuffer();
          }
          // Wait for buffer to become available.
          if (logger.isLoggable(Level.FINE)) {
              // If configured, log message after waiting some time.
              W buffer = queue.poll(acquireWarningLimit, TimeUnit.MILLISECONDS);
              if (buffer != null) {
                  buffer.lockBuffer();
                  return buffer;
              }
              logger.log(Level.FINE, new Throwable(),
                  () -> Thread.currentThread().getName() + " waiting > "
                      + acquireWarningLimit + "ms for buffer, while executing:");
          }
          W buffer = queue.take();
          buffer.lockBuffer();
          return buffer;
      }