base/common/src/main/com/thesett/common/throttle/BaseThrottle.java
public long timeToThrottleNanos()
    {
        long now = System.nanoTime();
        long remainingNanos = (cycleTimeNanos + lastCheckTimeNanos) - now;

        if ((remainingNanos <= 0))
        {
            firstCheckCall = false;
            lastCheckTimeNanos = now;

            return remainingNanos;
        }
        else if (firstCheckCall)
        {
            firstCheckCall = false;
            lastCheckTimeNanos = now;

            return 0;
        }
        else
        {
            return remainingNanos;
        }
    }
public long timeToThrottleNanos()
    {
        long now = System.nanoTime();
        long remainingNanos = (cycleTimeNanos + lastCheckTimeNanos) - now;

        if ((remainingNanos <= 0))
        {
            firstCheckCall = false;
            lastCheckTimeNanos = now;

            return remainingNanos;
        }
        else if (firstCheckCall)
        {
            firstCheckCall = false;
            lastCheckTimeNanos = now;

            return 0;
        }
        else
        {
            return remainingNanos;
        }
    }
Checks but does not enforce the throttle rate. When this method is called, it checks if a length of time greater
than that equal to the inverse of the throttling rate has passed since it was last called and returned <tt>
true</tt>. If the length of time still to elapse to the next throttle allow point is zero or less, this method
will return a negative value, if there is still time to pass until the throttle allow point, this method will
return a positive value indicating the amount of time still to pass. A thread can wait for that period of time
before rechecking the throttle condition.

@return The length of time since or still to elaps to the next throttle allow point. A negative value indicates
that the throttle time has passed and a positive time indicates that there is still time to pass before
it is reached. The units are in nanoseconds.