@NonNull @Override public Worker createWorker() { return new NewThreadWorker(threadFactory); } }
@NonNull @Override public Disposable schedule(@NonNull final Runnable run) { return schedule(run, 0, null); }
@Override public void dispose() { if (runner == Thread.currentThread() && w instanceof NewThreadWorker) { ((NewThreadWorker)w).shutdown(); } else { w.dispose(); } }
@NonNull @Override public Disposable schedule(@NonNull final Runnable action, long delayTime, @NonNull TimeUnit unit) { if (disposed) { return Scheduler.REJECTED; } return scheduleActual(action, delayTime, unit, null); }
/** * Regression test to ensure there is no NPE when the worker has been disposed. * @throws Exception on error */ @Test public void npeRegression() throws Exception { Scheduler s = getScheduler(); NewThreadWorker w = (NewThreadWorker) s.createWorker(); w.dispose(); //This method used to throw a NPE when the worker has been disposed and the parent is null w.scheduleActual(new Runnable() { @Override public void run() { } }, 0, TimeUnit.MILLISECONDS, null); } }
@NonNull @Override public Disposable schedule(@NonNull final Runnable action, long delayTime, @NonNull TimeUnit unit) { if (disposed) { return Scheduler.REJECTED; } return scheduleActual(action, delayTime, unit, null); }
/** * Regression test to ensure there is no NPE when the worker has been disposed. * @throws Exception on error */ @Test public void npeRegression() throws Exception { Scheduler s = getScheduler(); NewThreadWorker w = (NewThreadWorker) s.createWorker(); w.dispose(); //This method used to throw a NPE when the worker has been disposed and the parent is null w.scheduleActual(new Runnable() { @Override public void run() { } }, 0, TimeUnit.MILLISECONDS, null); } }
@NonNull @Override public Disposable schedule(@NonNull final Runnable action, long delayTime, @NonNull TimeUnit unit) { if (disposed) { return Scheduler.REJECTED; } return scheduleActual(action, delayTime, unit, null); }
@NonNull @Override public Disposable schedule(@NonNull final Runnable run) { return schedule(run, 0, null); }
@Override public void dispose() { if (runner == Thread.currentThread() && w instanceof NewThreadWorker) { ((NewThreadWorker)w).shutdown(); } else { w.dispose(); } }
@NonNull @Override public Worker createWorker() { return new NewThreadWorker(threadFactory); } }
@Test public void shutdownRejects() { final int[] calls = { 0 }; Runnable r = new Runnable() { @Override public void run() { calls[0]++; } }; Scheduler s = getScheduler(); Worker w = s.createWorker(); w.dispose(); assertTrue(w.isDisposed()); assertEquals(Disposables.disposed(), w.schedule(r)); assertEquals(Disposables.disposed(), w.schedule(r, 1, TimeUnit.SECONDS)); assertEquals(Disposables.disposed(), w.schedulePeriodically(r, 1, 1, TimeUnit.SECONDS)); NewThreadWorker actual = (NewThreadWorker)w; CompositeDisposable cd = new CompositeDisposable(); actual.scheduleActual(r, 1, TimeUnit.SECONDS, cd); assertEquals(0, cd.size()); assertEquals(0, calls[0]); }
@NonNull @Override public Disposable schedule(@NonNull final Runnable run) { return schedule(run, 0, null); }
@Override public void dispose() { if (runner == Thread.currentThread() && w instanceof NewThreadWorker) { ((NewThreadWorker)w).shutdown(); } else { w.dispose(); } }
@NonNull @Override public Worker createWorker() { return new NewThreadWorker(threadFactory); } }
@Test public void shutdownRejects() { final int[] calls = { 0 }; Runnable r = new Runnable() { @Override public void run() { calls[0]++; } }; Scheduler s = getScheduler(); Worker w = s.createWorker(); w.dispose(); assertTrue(w.isDisposed()); assertEquals(Disposables.disposed(), w.schedule(r)); assertEquals(Disposables.disposed(), w.schedule(r, 1, TimeUnit.SECONDS)); assertEquals(Disposables.disposed(), w.schedulePeriodically(r, 1, 1, TimeUnit.SECONDS)); NewThreadWorker actual = (NewThreadWorker)w; CompositeDisposable cd = new CompositeDisposable(); actual.scheduleActual(r, 1, TimeUnit.SECONDS, cd); assertEquals(0, cd.size()); assertEquals(0, calls[0]); }