code: private boolean compareAndSet(final State current, final State next) {
          if (state.compareAndSet(current, next)) {
              return true;
          }
          parkNanos(1); // back-off
          return false;
      }
docs: Atomically sets the value to the given updated value
  if the current value {@code ==} the expected value.
  It differs from {@link AtomicReference#updateAndGet(UnaryOperator)} by constant back off.
  It means that after one try to {@link AtomicReference#compareAndSet(Object, Object)}
  this method will wait for a while before try one more time.
  This technique was originally described in this
  <a href="https://arxiv.org/abs/1305.5800"> paper</a>
  and showed great results with {@link AtomicRateLimiter} in benchmark tests.
  
  @param current the expected value
  @param next    the new value
  @return {@code true} if successful. False return indicates that
  the actual value was not equal to the expected value.