code: public int take(int n) {
        int lenToTake;
        while (true) {
           int stored = spent.get();
           lenToTake = Math.min(n, thingsPerTick - stored);
           if (stored >= thingsPerTick)
              sleep();
           else if (spent.compareAndSet(stored, stored + lenToTake))
              break;
        }
        timewiseAvailable -= lenToTake;
        return lenToTake;
     }
docs: Takes several things (eg. bytes). This method blocks until at least one
  thing can be used according to the current rate and prescaling settings.
  
  This method returns at least 1.
  
  @param n
  up to how many things to take
  @return the number of things that have been taken, at least 1