/** * Schedule a fixed delay recurring task to run. The recurring delay time will be from the * point where execution has finished. So the execution frequency is the * {@code recurringDelay + runtime} for the provided task. * <p> * Unlike {@link java.util.concurrent.ScheduledExecutorService} if the task throws an exception, * subsequent executions are NOT suppressed or prevented. So if the task throws an exception on * every run, the task will continue to be executed at the provided recurring delay (possibly * throwing an exception on each execution). * <p> * The key is used to identify this threads execution limit. Tasks with matching keys will be * limited concurrent execution to the level returned by {@link #getMaxConcurrencyPerKey()}. * <p> * See also: {@link SubmitterScheduler#scheduleWithFixedDelay(Runnable, long, long)} * * @param taskKey Key to use for identifying execution limit * @param task runnable to be executed * @param initialDelay delay in milliseconds until first run * @param recurringDelay delay in milliseconds for running task after last finish */ public void scheduleWithFixedDelay(Object taskKey, Runnable task, long initialDelay, long recurringDelay) { ArgumentVerifier.assertNotNull(taskKey, "taskKey"); LimiterContainer lc = getLimiterContainer(taskKey); // we don't wrap the task here because it is recurring, this limiter can never be removed lc.limiter.scheduleWithFixedDelay(task, initialDelay, recurringDelay); }
/** * Schedule a fixed delay recurring task to run. The recurring delay time will be from the * point where execution has finished. So the execution frequency is the * {@code recurringDelay + runtime} for the provided task. * <p> * Unlike {@link java.util.concurrent.ScheduledExecutorService} if the task throws an exception, * subsequent executions are NOT suppressed or prevented. So if the task throws an exception on * every run, the task will continue to be executed at the provided recurring delay (possibly * throwing an exception on each execution). * <p> * The key is used to identify this threads execution limit. Tasks with matching keys will be * limited concurrent execution to the level returned by {@link #getMaxConcurrencyPerKey()}. * <p> * See also: {@link SubmitterScheduler#scheduleWithFixedDelay(Runnable, long, long)} * * @param taskKey Key to use for identifying execution limit * @param task runnable to be executed * @param initialDelay delay in milliseconds until first run * @param recurringDelay delay in milliseconds for running task after last finish */ public void scheduleWithFixedDelay(Object taskKey, Runnable task, long initialDelay, long recurringDelay) { ArgumentVerifier.assertNotNull(taskKey, "taskKey"); LimiterContainer lc = getLimiterContainer(taskKey); // we don't wrap the task here because it is recurring, this limiter can never be removed lc.limiter.scheduleWithFixedDelay(task, initialDelay, recurringDelay); }