public synchronized void throttle()

in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/Throttler.java [107:136]


    public synchronized void throttle() throws InterruptedException {
        long now = System.currentTimeMillis();
        long checkPoint = checkPointTimes_.get(index_);
        if (checkPoint > 0) {
            long elapsed = now - checkPoint;
            
            // if the time for this window is less than the minimum per window
            if (elapsed >= 0 && elapsed < rateInterval_) {
                long sleepInterval = rateInterval_ - elapsed - overslept_;
                overslept_ = 0;
                if (sleepInterval > 0) {
                    if (log.isTraceEnabled()) {
                        log.debug("Throttling "
                                + name_
                                + ": called "
                                + checkPointTimes_.size()
                                + " times in last "
                                + elapsed
                                + " milliseconds. Going to sleep for "
                                + sleepInterval
                                + " milliseconds.");
                    }
                    long t = System.currentTimeMillis();
                    Thread.sleep(sleepInterval);
                    overslept_ = System.currentTimeMillis() - t - sleepInterval;
                }
            }
        }
        checkPointTimes_.set(index_++, System.currentTimeMillis());
    }