55 lines
1.9 KiB
Java
55 lines
1.9 KiB
Java
package io.reactivex.internal.schedulers;
|
|
|
|
import io.reactivex.disposables.Disposable;
|
|
import io.reactivex.internal.functions.Functions;
|
|
import io.reactivex.schedulers.SchedulerRunnableIntrospection;
|
|
import java.util.concurrent.Future;
|
|
import java.util.concurrent.FutureTask;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
abstract class AbstractDirectTask extends AtomicReference<Future<?>> implements Disposable, SchedulerRunnableIntrospection {
|
|
private static final long serialVersionUID = 1811839108042568751L;
|
|
protected final Runnable runnable;
|
|
protected Thread runner;
|
|
protected static final FutureTask<Void> FINISHED = new FutureTask<>(Functions.b, null);
|
|
protected static final FutureTask<Void> DISPOSED = new FutureTask<>(Functions.b, null);
|
|
|
|
AbstractDirectTask(Runnable runnable) {
|
|
this.runnable = runnable;
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public final void dispose() {
|
|
FutureTask<Void> futureTask;
|
|
Future<?> future = get();
|
|
if (future == FINISHED || future == (futureTask = DISPOSED) || !compareAndSet(future, futureTask) || future == null) {
|
|
return;
|
|
}
|
|
future.cancel(this.runner != Thread.currentThread());
|
|
}
|
|
|
|
public Runnable getWrappedRunnable() {
|
|
return this.runnable;
|
|
}
|
|
|
|
public final boolean isDisposed() {
|
|
Future<?> future = get();
|
|
return future == FINISHED || future == DISPOSED;
|
|
}
|
|
|
|
public final void setFuture(Future<?> future) {
|
|
Future<?> future2;
|
|
do {
|
|
future2 = get();
|
|
if (future2 == FINISHED) {
|
|
return;
|
|
}
|
|
if (future2 == DISPOSED) {
|
|
future.cancel(this.runner != Thread.currentThread());
|
|
return;
|
|
}
|
|
} while (!compareAndSet(future2, future));
|
|
}
|
|
}
|