jimu-decompiled/sources/io/reactivex/internal/schedulers/AbstractDirectTask.java
2025-05-13 19:24:51 +02:00

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));
}
}