RxJava3 RxImmediateSchedulerRule ExecutorScheduler fair parameter

Viewed 445

RxJava rule for testing with schedulers was

import io.reactivex.Scheduler
import io.reactivex.android.plugins.RxAndroidPlugins
import io.reactivex.internal.schedulers.ExecutorScheduler
import io.reactivex.plugins.RxJavaPlugins
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import java.util.concurrent.Executor

class RxImmediateSchedulerRule : TestRule {

    private val immediate = object : Scheduler() {

        override fun createWorker(): Worker {
            return ExecutorScheduler.ExecutorWorker(Executor { it.run() }, true)
        }
    }

//    private val immediate = Schedulers.trampoline()

    override fun apply(base: Statement, description: Description): Statement {
        return object : Statement() {
            @Throws(Throwable::class)
            override fun evaluate() {
                RxJavaPlugins.setInitIoSchedulerHandler { immediate }
                RxJavaPlugins.setInitComputationSchedulerHandler { immediate }
                RxJavaPlugins.setInitNewThreadSchedulerHandler { immediate }
                RxJavaPlugins.setInitSingleSchedulerHandler { immediate }
                RxAndroidPlugins.setInitMainThreadSchedulerHandler { immediate }

                try {
                    base.evaluate()
                } finally {
                    RxJavaPlugins.reset()
                    RxAndroidPlugins.reset()
                }
            }
        }
    }
}

Now with RxJava3

ExecutorScheduler.ExecutorWorker(Executor { it.run() }, true, true)

Second parameter here is called fair but there is no JavaDoc or explanation for this parameter in ExecutorScheduler class. Wha is fair paramater used for, and when it should be used?

1 Answers

no JavaDoc or explanation for this parameter in ExecutorScheduler class

That's because ExecutorScheduler is an internal class an is not meant to be or expected to be used directly.

The fairness is explained in the JavaDocs of Schedulers.from().

Related