package com.nurkiewicz.asyncretry.backoff; import com.nurkiewicz.asyncretry.RetryContext; /** * @author Tomasz Nurkiewicz * @since 7/16/13, 6:17 PM */ public class ExponentialDelayBackoff implements Backoff { private final long initialDelayMillis; private final double multiplier; public ExponentialDelayBackoff(long initialDelayMillis, double multiplier) { if (initialDelayMillis <= 0) { throw new IllegalArgumentException("Initial delay must be positive but was: " + initialDelayMillis); } this.initialDelayMillis = initialDelayMillis; this.multiplier = multiplier; } @Override public long delayMillis(RetryContext context) { return (long) (initialDelayMillis * Math.pow(multiplier, context.getRetryCount() - 1)); } }