docs: @Override
      public T poll(long timeout, TimeUnit unit) throws InterruptedException {
          T old = poll();
          long endTimeMillis = System.currentTimeMillis() + unit.toMillis(timeout);
          long timeLeftMillis = endTimeMillis - System.currentTimeMillis();
          int spinctr = SPINS_TAKE_;
  
          while (old == null && timeLeftMillis > 0) {
              while (size() <= 0 && timeLeftMillis > 0) {
                  if (spinctr > 0) {
                      // busy wait
                      if (YIELD_TAKE_)
                          Thread.yield();
                      spinctr--;
                  } else {
                      // block on lock
                      waitGet_(timeLeftMillis);
                  }
                  timeLeftMillis = endTimeMillis - System.currentTimeMillis();
              }
  
              old = poll();
              timeLeftMillis = endTimeMillis - System.currentTimeMillis();
          }
  
          return old;
      }