docs: public void idle()
      {
          switch (state)
          {
              case NOT_IDLE:
                  state = SPINNING;
                  spins++;
                  break;
  
              case SPINNING:
                  ThreadHints.onSpinWait();
                  if (++spins > maxSpins)
                  {
                      state = YIELDING;
                      yields = 0;
                  }
                  break;
  
              case YIELDING:
                  if (++yields > maxYields)
                  {
                      state = PARKING;
                      parkPeriodNs = minParkPeriodNs;
                  }
                  else
                  {
                      Thread.yield();
                  }
                  break;
  
              case PARKING:
                  LockSupport.parkNanos(parkPeriodNs);
                  parkPeriodNs = Math.min(parkPeriodNs << 1, maxParkPeriodNs);
                  break;
          }
      }