Copyright (c) 2016-present, RxJava Contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
/** * Copyright (c) 2016-present, RxJava Contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See * the License for the specific language governing permissions and limitations under the License. */
package io.reactivex.internal.schedulers; import java.util.concurrent.TimeUnit; import io.reactivex.Scheduler; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.*;
A Scheduler partially implementing the API by allowing only non-delayed, non-periodic task execution on the current thread immediately.

Note that this doesn't support recursive scheduling and disposing the returned Disposable has no effect (because when the schedule() method returns, the task has been already run).

/** * A Scheduler partially implementing the API by allowing only non-delayed, non-periodic * task execution on the current thread immediately. * <p> * Note that this doesn't support recursive scheduling and disposing the returned Disposable * has no effect (because when the schedule() method returns, the task has been already run). */
public final class ImmediateThinScheduler extends Scheduler {
The singleton instance of the immediate (thin) scheduler.
/** * The singleton instance of the immediate (thin) scheduler. */
public static final Scheduler INSTANCE = new ImmediateThinScheduler(); static final Worker WORKER = new ImmediateThinWorker(); static final Disposable DISPOSED; static { DISPOSED = Disposables.empty(); DISPOSED.dispose(); } private ImmediateThinScheduler() { // singleton class } @NonNull @Override public Disposable scheduleDirect(@NonNull Runnable run) { run.run(); return DISPOSED; } @NonNull @Override public Disposable scheduleDirect(@NonNull Runnable run, long delay, TimeUnit unit) { throw new UnsupportedOperationException("This scheduler doesn't support delayed execution"); } @NonNull @Override public Disposable schedulePeriodicallyDirect(@NonNull Runnable run, long initialDelay, long period, TimeUnit unit) { throw new UnsupportedOperationException("This scheduler doesn't support periodic execution"); } @NonNull @Override public Worker createWorker() { return WORKER; } static final class ImmediateThinWorker extends Worker { @Override public void dispose() { // This worker is always stateless and won't track tasks } @Override public boolean isDisposed() { return false; // dispose() has no effect } @NonNull @Override public Disposable schedule(@NonNull Runnable run) { run.run(); return DISPOSED; } @NonNull @Override public Disposable schedule(@NonNull Runnable run, long delay, @NonNull TimeUnit unit) { throw new UnsupportedOperationException("This scheduler doesn't support delayed execution"); } @NonNull @Override public Disposable schedulePeriodically(@NonNull Runnable run, long initialDelay, long period, TimeUnit unit) { throw new UnsupportedOperationException("This scheduler doesn't support periodic execution"); } } }