docs: public Element<T> get() {
          // start at a random index, so different threads don't all start at index 0 and compete for the lock
          int starting_index=((int)(Math.random() * pool.length)) & (pool.length - 1);
          for(int i=0; i < locks.length; i++) {
              int index=(starting_index + i) & (pool.length -1);
              Lock lock=locks[index];
              if(lock.tryLock()) {
                  if(pool[index] != null)
                      return new Element<>(pool[index], lock);
                  return new Element<>(pool[index]=creator.get(), lock);
              }
          }
          return new Element<>(creator.get(), null);
      }