@@ -0,0 +1,1340 @@
+package com.speedment.tool.core.internal.util;%0A%0Aimport java.util.concurrent.ConcurrentHashMap;%0Aimport java.util.concurrent.atomic.AtomicLong;%0A%0A/**%0A * Throttles requests so that they are only invoked at a maximum frequency. If%0A * more calls are made, others will be dropped.%0A * %3Cp%3E%0A * This class is concurrent.%0A *%0A * @author Emil Forslund%0A * @since  3.0.16%0A */%0Apublic final class Throttler %7B%0A%0A    private final ConcurrentHashMap%3CString, AtomicLong%3E timers;%0A    private final long millis;%0A%0A    private Throttler(long millis) %7B%0A        this.millis   = millis;%0A        this.timers = new ConcurrentHashMap%3C%3E();%0A    %7D%0A%0A    /**%0A     * Attempts to invoke the specified %7B@code runnable%7D if no other action with%0A     * the same specifier has been called recently. Otherwise, the method will%0A     * return with no effect.%0A     *%0A     * @param action    the action specifier%0A     * @param runnable  the callable action to invoke%0A     */%0A    public void call(String action, Runnable runnable) %7B%0A        final long now = now();%0A        final AtomicLong timer = timers.computeIfAbsent(action, a -%3E new AtomicLong(0));%0A        if (now == timer.updateAndGet(%0A            lastCall -%3E lastCall + millis %3C now%0A                ? now : lastCall%0A        )) runnable.run();%0A    %7D%0A%0A    private static long now() %7B%0A        return System.currentTimeMillis();%0A    %7D%0A%7D%0A

Create throttler utility class