code: protected boolean incrementPoolSize(int expectingMaxSize) {
  
          Integer maxSize = null;
          long currentOverflowPoolSize;
          try {
              lock.lockInterruptibly();
              int currentMaxSize = poolAdapter.getMaxPoolSize();
              boolean incrementMaxPoolSize = currentMaxSize < maxOverflowPoolSize;
              if (currentMaxSize > expectingMaxSize) {
                  LOGGER.info("Pool size changed by other thread, expected {} and actual value {}", expectingMaxSize, currentMaxSize);
                  return incrementMaxPoolSize;
              }
              if (!incrementMaxPoolSize) {
                  return false;
              }
              currentOverflowPoolSize = overflowPoolSize.incrementAndGet();
              poolAdapter.setMaxPoolSize(++currentMaxSize);
              maxSize = currentMaxSize;
          } catch (InterruptedException e) {
              Thread.currentThread().interrupt();
              return false;
          } finally {
              lock.unlock();
          }
          LOGGER.info("Pool size changed from previous value {} to {}", expectingMaxSize, maxSize);
          maxPoolSizeHistogram.update(maxSize);
          overflowPoolSizeHistogram.update(currentOverflowPoolSize);
          return true;
      }
docs: Attempt to increment the pool size. If the maxSize changes, it skips the incrementing process.
  
  @param expectingMaxSize expecting maximum pool size
  @return if it succeeded changing the pool size