130 lines
4.8 KiB
Java
130 lines
4.8 KiB
Java
package io.reactivex.internal.schedulers;
|
|
|
|
import io.reactivex.Scheduler;
|
|
import io.reactivex.disposables.CompositeDisposable;
|
|
import io.reactivex.disposables.Disposable;
|
|
import io.reactivex.internal.disposables.EmptyDisposable;
|
|
import io.reactivex.plugins.RxJavaPlugins;
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.Future;
|
|
import java.util.concurrent.RejectedExecutionException;
|
|
import java.util.concurrent.ScheduledExecutorService;
|
|
import java.util.concurrent.ThreadFactory;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class SingleScheduler extends Scheduler {
|
|
static final RxThreadFactory c;
|
|
static final ScheduledExecutorService d = Executors.newScheduledThreadPool(0);
|
|
final AtomicReference<ScheduledExecutorService> b;
|
|
|
|
static final class ScheduledWorker extends Scheduler.Worker {
|
|
final ScheduledExecutorService a;
|
|
final CompositeDisposable b = new CompositeDisposable();
|
|
volatile boolean c;
|
|
|
|
ScheduledWorker(ScheduledExecutorService scheduledExecutorService) {
|
|
this.a = scheduledExecutorService;
|
|
}
|
|
|
|
@Override // io.reactivex.Scheduler.Worker
|
|
public Disposable a(Runnable runnable, long j, TimeUnit timeUnit) {
|
|
if (this.c) {
|
|
return EmptyDisposable.INSTANCE;
|
|
}
|
|
ScheduledRunnable scheduledRunnable = new ScheduledRunnable(RxJavaPlugins.a(runnable), this.b);
|
|
this.b.b(scheduledRunnable);
|
|
try {
|
|
scheduledRunnable.setFuture(j <= 0 ? this.a.submit((Callable) scheduledRunnable) : this.a.schedule((Callable) scheduledRunnable, j, timeUnit));
|
|
return scheduledRunnable;
|
|
} catch (RejectedExecutionException e) {
|
|
dispose();
|
|
RxJavaPlugins.b(e);
|
|
return EmptyDisposable.INSTANCE;
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.disposables.Disposable
|
|
public void dispose() {
|
|
if (this.c) {
|
|
return;
|
|
}
|
|
this.c = true;
|
|
this.b.dispose();
|
|
}
|
|
}
|
|
|
|
static {
|
|
d.shutdown();
|
|
c = new RxThreadFactory("RxSingleScheduler", Math.max(1, Math.min(10, Integer.getInteger("rx2.single-priority", 5).intValue())), true);
|
|
}
|
|
|
|
public SingleScheduler() {
|
|
this(c);
|
|
}
|
|
|
|
static ScheduledExecutorService a(ThreadFactory threadFactory) {
|
|
return SchedulerPoolFactory.a(threadFactory);
|
|
}
|
|
|
|
public SingleScheduler(ThreadFactory threadFactory) {
|
|
this.b = new AtomicReference<>();
|
|
this.b.lazySet(a(threadFactory));
|
|
}
|
|
|
|
@Override // io.reactivex.Scheduler
|
|
public Scheduler.Worker a() {
|
|
return new ScheduledWorker(this.b.get());
|
|
}
|
|
|
|
@Override // io.reactivex.Scheduler
|
|
public Disposable a(Runnable runnable, long j, TimeUnit timeUnit) {
|
|
Future<?> schedule;
|
|
ScheduledDirectTask scheduledDirectTask = new ScheduledDirectTask(RxJavaPlugins.a(runnable));
|
|
try {
|
|
if (j <= 0) {
|
|
schedule = this.b.get().submit(scheduledDirectTask);
|
|
} else {
|
|
schedule = this.b.get().schedule(scheduledDirectTask, j, timeUnit);
|
|
}
|
|
scheduledDirectTask.setFuture(schedule);
|
|
return scheduledDirectTask;
|
|
} catch (RejectedExecutionException e) {
|
|
RxJavaPlugins.b(e);
|
|
return EmptyDisposable.INSTANCE;
|
|
}
|
|
}
|
|
|
|
@Override // io.reactivex.Scheduler
|
|
public Disposable a(Runnable runnable, long j, long j2, TimeUnit timeUnit) {
|
|
Future<?> schedule;
|
|
Runnable a = RxJavaPlugins.a(runnable);
|
|
if (j2 <= 0) {
|
|
ScheduledExecutorService scheduledExecutorService = this.b.get();
|
|
InstantPeriodicTask instantPeriodicTask = new InstantPeriodicTask(a, scheduledExecutorService);
|
|
try {
|
|
if (j <= 0) {
|
|
schedule = scheduledExecutorService.submit(instantPeriodicTask);
|
|
} else {
|
|
schedule = scheduledExecutorService.schedule(instantPeriodicTask, j, timeUnit);
|
|
}
|
|
instantPeriodicTask.a(schedule);
|
|
return instantPeriodicTask;
|
|
} catch (RejectedExecutionException e) {
|
|
RxJavaPlugins.b(e);
|
|
return EmptyDisposable.INSTANCE;
|
|
}
|
|
}
|
|
ScheduledDirectPeriodicTask scheduledDirectPeriodicTask = new ScheduledDirectPeriodicTask(a);
|
|
try {
|
|
scheduledDirectPeriodicTask.setFuture(this.b.get().scheduleAtFixedRate(scheduledDirectPeriodicTask, j, j2, timeUnit));
|
|
return scheduledDirectPeriodicTask;
|
|
} catch (RejectedExecutionException e2) {
|
|
RxJavaPlugins.b(e2);
|
|
return EmptyDisposable.INSTANCE;
|
|
}
|
|
}
|
|
}
|