@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { return cached.schedulePeriodically(task, initialDelay, period, unit); }
@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { if (tasksRemaining.decrementAndGet() < 0) { throw new RejectedExecutionException("BoundedScheduler schedule periodically: no more tasks"); } return actual.schedulePeriodically(task, initialDelay, period, unit); }
@Test public void scheduledDoesntReject() { Scheduler s = Schedulers.fromExecutorService(Executors.newSingleThreadScheduledExecutor()); assertThat(s.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("direct delayed scheduling") .isNotNull(); assertThat(s.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("direct periodic scheduling") .isNotNull(); Worker w = s.createWorker(); assertThat(w.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("worker delayed scheduling") .isNotNull(); assertThat(w.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("worker periodic scheduling") .isNotNull(); }
@Test public void scheduledDoesntReject() { Scheduler s = scheduler(); assertThat(s.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("direct delayed scheduling") .isNotNull(); assertThat(s.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("direct periodic scheduling") .isNotNull(); Scheduler.Worker w = s.createWorker(); assertThat(w.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("worker delayed scheduling") .isNotNull(); assertThat(w.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("worker periodic scheduling") .isNotNull(); }
@Test public void scheduledDoesntReject() { Scheduler s = scheduler(); assertThat(s.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("direct delayed scheduling") .isNotNull(); assertThat(s.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("direct periodic scheduling") .isNotNull(); Scheduler.Worker w = s.createWorker(); assertThat(w.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("worker delayed scheduling") .isNotNull(); assertThat(w.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("worker periodic scheduling") .isNotNull(); }
Disposable d = s.schedulePeriodically(() -> { try { latch.countDown();
@Test public void notScheduledRejects() { Scheduler s = Schedulers.fromExecutorService(Executors.newSingleThreadExecutor()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> s.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("direct delayed scheduling") .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> s.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("direct periodic scheduling") .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); Worker w = s.createWorker(); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> w.schedule(() -> {}, 100, TimeUnit.MILLISECONDS)) .describedAs("worker delayed scheduling") .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> w.schedulePeriodically(() -> {}, 100, 100, TimeUnit.MILLISECONDS)) .describedAs("worker periodic scheduling") .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); }
@Test public void directAndWorkerTimeSchedulingRejected() { Scheduler scheduler = scheduler(); Scheduler.Worker worker = scheduler.createWorker(); try { assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> scheduler.schedule(() -> { }, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> scheduler.schedulePeriodically(() -> { }, 100, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> worker.schedule(() -> { }, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> worker.schedulePeriodically(() -> { }, 100, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); } finally { worker.dispose(); } }
@Test public void directAndWorkerTimeSchedulingRejected() { Scheduler scheduler = scheduler(); Worker worker = scheduler.createWorker(); try { assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> scheduler.schedule(() -> { }, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> scheduler.schedulePeriodically(() -> { }, 100, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> worker.schedule(() -> { }, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> worker.schedulePeriodically(() -> { }, 100, 100, TimeUnit.MILLISECONDS)) .isSameAs(Exceptions.failWithRejectedNotTimeCapable()); } finally { worker.dispose(); } }
@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { return cached.schedulePeriodically(task, initialDelay, period, unit); }
@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { return delegate.schedulePeriodically(task, initialDelay, period, unit); }
@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { return inner.schedulePeriodically(decorate(task), initialDelay, period, unit); }
@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { return inner.schedulePeriodically(decorate(task), initialDelay, period, unit); }
private void schedulePeriodicSync() { int syncInterval = config.getSyncInterval(); actionsDisposables.add( scheduler.schedulePeriodically( this::doSync, syncInterval, syncInterval, TimeUnit.MILLISECONDS)); }
private void schedulePeriodicSync() { int syncInterval = config.getSyncInterval(); actionsDisposables.add( scheduler.schedulePeriodically( this::doSync, syncInterval, syncInterval, TimeUnit.MILLISECONDS)); }
@Override public Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit) { TrampolinedTask trampolinedTask = new TrampolinedTask(pool, task, NO_PARENT); return new CompositeDisposable(scheduler.schedulePeriodically(trampolinedTask, initialDelay, period, unit), trampolinedTask); }
@Override public void start() { actionsDisposables.add( scheduler.schedulePeriodically( this::doPing, config.getPingInterval(), config.getPingInterval(), TimeUnit.MILLISECONDS)); }
@Override public void start() { actionsDisposables.add( scheduler.schedulePeriodically( this::doSpreadGossip, config.getGossipInterval(), config.getGossipInterval(), TimeUnit.MILLISECONDS)); }
@Override public void start() { actionsDisposables.add( scheduler.schedulePeriodically( this::doPing, config.getPingInterval(), config.getPingInterval(), TimeUnit.MILLISECONDS)); }
@Override public void start() { actionsDisposables.add( scheduler.schedulePeriodically( this::doSpreadGossip, config.getGossipInterval(), config.getGossipInterval(), TimeUnit.MILLISECONDS)); }