use of io.reactivex.rxjava3.core.Scheduler in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method interruptibleDirectTaskScheduledExecutor.
@Test
public void interruptibleDirectTaskScheduledExecutor() throws Exception {
ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
try {
Scheduler scheduler = Schedulers.from(exec, true);
final AtomicInteger sync = new AtomicInteger(2);
final AtomicBoolean isInterrupted = new AtomicBoolean();
Disposable d = scheduler.scheduleDirect(new Runnable() {
@Override
public void run() {
if (sync.decrementAndGet() != 0) {
while (sync.get() != 0) {
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
isInterrupted.set(true);
}
}
});
if (sync.decrementAndGet() != 0) {
while (sync.get() != 0) {
}
}
Thread.sleep(500);
d.dispose();
int i = 20;
while (i-- > 0 && !isInterrupted.get()) {
Thread.sleep(50);
}
assertTrue("Interruption did not propagate", isInterrupted.get());
} finally {
exec.shutdown();
}
}
use of io.reactivex.rxjava3.core.Scheduler in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method cancelledWorkerDoesntRunTasks.
@Test
public void cancelledWorkerDoesntRunTasks() {
final AtomicInteger calls = new AtomicInteger();
Runnable task = new Runnable() {
@Override
public void run() {
calls.getAndIncrement();
}
};
TestExecutor exec = new TestExecutor();
Scheduler custom = Schedulers.from(exec, true);
Worker w = custom.createWorker();
try {
w.schedule(task);
w.schedule(task);
w.schedule(task);
} finally {
w.dispose();
}
exec.executeAll();
assertEquals(0, calls.get());
}
use of io.reactivex.rxjava3.core.Scheduler in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method cancelledTasksDontRun.
@Test
public void cancelledTasksDontRun() {
final AtomicInteger calls = new AtomicInteger();
Runnable task = new Runnable() {
@Override
public void run() {
calls.getAndIncrement();
}
};
TestExecutor exec = new TestExecutor();
Scheduler custom = Schedulers.from(exec, true);
Worker w = custom.createWorker();
try {
Disposable d1 = w.schedule(task);
Disposable d2 = w.schedule(task);
Disposable d3 = w.schedule(task);
d1.dispose();
d2.dispose();
d3.dispose();
exec.executeAll();
assertEquals(0, calls.get());
} finally {
w.dispose();
}
}
use of io.reactivex.rxjava3.core.Scheduler in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method interruptibleWorkerTask.
@Test
public void interruptibleWorkerTask() throws Exception {
Scheduler scheduler = getScheduler();
Worker worker = scheduler.createWorker();
try {
final AtomicInteger sync = new AtomicInteger(2);
final AtomicBoolean isInterrupted = new AtomicBoolean();
Disposable d = worker.schedule(new Runnable() {
@Override
public void run() {
if (sync.decrementAndGet() != 0) {
while (sync.get() != 0) {
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
isInterrupted.set(true);
}
}
});
if (sync.decrementAndGet() != 0) {
while (sync.get() != 0) {
}
}
Thread.sleep(500);
d.dispose();
int i = 20;
while (i-- > 0 && !isInterrupted.get()) {
Thread.sleep(50);
}
assertTrue("Interruption did not propagate", isInterrupted.get());
} finally {
worker.dispose();
}
}
use of io.reactivex.rxjava3.core.Scheduler in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method runnableDisposedAsyncTimed.
@Test
public void runnableDisposedAsyncTimed() throws Exception {
final Scheduler s = Schedulers.from(new Executor() {
@Override
public void execute(Runnable r) {
new Thread(r).start();
}
}, true);
Disposable d = s.scheduleDirect(Functions.EMPTY_RUNNABLE, 1, TimeUnit.MILLISECONDS);
while (!d.isDisposed()) {
Thread.sleep(1);
}
}
Aggregations