package tc.oc.commons.core.scheduler; import java.time.Duration; import static com.google.common.base.Preconditions.checkNotNull; /** * Task that can only be scheduled if it is not already scheduled. */ public class DebouncedTask extends ReusableTask { private final Duration delay; DebouncedTask(Scheduler scheduler, Runnable runnable) { this(scheduler, Duration.ZERO, runnable); } DebouncedTask(Scheduler scheduler, Duration delay, Runnable runnable) { super(scheduler, runnable); this.delay = checkNotNull(delay); } public boolean schedule() { if(isQueued()) return false; schedule(Task.Parameters.after(delay)); return true; } }