use of io.reactivex.rxjava3.disposables.Disposable in project RxJava by ReactiveX.
the class ExecutorSchedulerTest method interruptibleRunnableRunDispose.
@Test
public void interruptibleRunnableRunDispose() {
try {
for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) {
AtomicReference<Runnable> runRef = new AtomicReference<>();
Scheduler s = Schedulers.from(r -> {
runRef.set(r);
}, true);
Disposable d = s.scheduleDirect(() -> {
});
TestHelper.race(() -> runRef.get().run(), () -> d.dispose());
}
} finally {
Thread.interrupted();
}
}
use of io.reactivex.rxjava3.disposables.Disposable in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method nonInterruptibleDirectTaskScheduledExecutorTimed.
@Test
public void nonInterruptibleDirectTaskScheduledExecutorTimed() throws Exception {
ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
try {
Scheduler scheduler = Schedulers.from(exec, false);
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);
}
}
}, 1, TimeUnit.MILLISECONDS);
if (sync.decrementAndGet() != 0) {
while (sync.get() != 0) {
}
}
Thread.sleep(500);
d.dispose();
int i = 20;
while (i-- > 0 && !isInterrupted.get()) {
Thread.sleep(50);
}
assertFalse("Interruption happened", isInterrupted.get());
} finally {
exec.shutdown();
}
}
use of io.reactivex.rxjava3.disposables.Disposable in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method nonInterruptibleWorkerTask.
@Test
public void nonInterruptibleWorkerTask() throws Exception {
ExecutorService exec = Executors.newSingleThreadExecutor();
try {
Scheduler scheduler = Schedulers.from(exec, false);
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);
}
assertFalse("Interruption happened", isInterrupted.get());
} finally {
worker.dispose();
}
} finally {
exec.shutdown();
}
}
use of io.reactivex.rxjava3.disposables.Disposable in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method nonInterruptibleWorkerTaskScheduledExecutorTimed.
@Test
public void nonInterruptibleWorkerTaskScheduledExecutorTimed() throws Exception {
ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
try {
Scheduler scheduler = Schedulers.from(exec, false);
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);
}
}
}, 1, TimeUnit.MILLISECONDS);
if (sync.decrementAndGet() != 0) {
while (sync.get() != 0) {
}
}
Thread.sleep(500);
d.dispose();
int i = 20;
while (i-- > 0 && !isInterrupted.get()) {
Thread.sleep(50);
}
assertFalse("Interruption happened", isInterrupted.get());
} finally {
worker.dispose();
}
} finally {
exec.shutdown();
}
}
use of io.reactivex.rxjava3.disposables.Disposable in project RxJava by ReactiveX.
the class ExecutorSchedulerInterruptibleTest method runnableDisposedAsyncTimed2.
@Test
public void runnableDisposedAsyncTimed2() throws Exception {
ExecutorService executorScheduler = Executors.newScheduledThreadPool(1, new RxThreadFactory("TestCustomPoolTimed"));
try {
final Scheduler s = Schedulers.from(executorScheduler, true);
Disposable d = s.scheduleDirect(Functions.EMPTY_RUNNABLE, 1, TimeUnit.MILLISECONDS);
while (!d.isDisposed()) {
Thread.sleep(1);
}
} finally {
executorScheduler.shutdownNow();
}
}
Aggregations