package org.threadly.concurrent.wrapper.compatibility; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.threadly.concurrent.AbstractSubmitterScheduler; import org.threadly.concurrent.wrapper.ThrowableSuppressingRunnable; import org.threadly.util.ArgumentVerifier; /** * This is a wrapper for the {@link java.util.concurrent.ScheduledThreadPoolExecutor} to use that * implementation with the {@link org.threadly.concurrent.SubmitterScheduler}. * * @since 4.6.0 (since 1.0.0 at org.threadly.concurrent) */ public class ScheduledExecutorServiceWrapper extends AbstractSubmitterScheduler { protected final ScheduledExecutorService scheduler; /** * Constructs a new wrapper with the provided scheduler implementation. * * @param scheduler {@link ScheduledExecutorService} implementation */ public ScheduledExecutorServiceWrapper(ScheduledExecutorService scheduler) { ArgumentVerifier.assertNotNull(scheduler, "scheduler"); this.scheduler = scheduler; } @Override protected void doSchedule(Runnable task, long delayInMillis) { scheduler.schedule(task, delayInMillis, TimeUnit.MILLISECONDS); } @Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay) { ArgumentVerifier.assertNotNull(task, "task"); ArgumentVerifier.assertNotNegative(initialDelay, "initialDelay"); ArgumentVerifier.assertNotNegative(recurringDelay, "recurringDelay"); scheduler.scheduleWithFixedDelay(new ThrowableSuppressingRunnable(task), initialDelay, recurringDelay, TimeUnit.MILLISECONDS); } @Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period) { ArgumentVerifier.assertNotNull(task, "task"); ArgumentVerifier.assertNotNegative(initialDelay, "initialDelay"); ArgumentVerifier.assertNotNegative(period, "period"); scheduler.scheduleAtFixedRate(new ThrowableSuppressingRunnable(task), initialDelay, period, TimeUnit.MILLISECONDS); } }