RxJava3 RxImmediateSchedulerRule ExecutorScheduler 公平参数

RxJava3 RxImmediateSchedulerRule ExecutorScheduler fair parameter

用于使用调度程序进行测试的 RxJava 规则是

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

现在使用 RxJava3

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

此处的第二个参数称为 fair,但 ExecutorScheduler class 中没有对此参数的 JavaDoc 或解释。什么是公平参数,应该在什么时候使用?

no JavaDoc or explanation for this parameter in ExecutorScheduler class

那是因为 ExecutorScheduler 是一个内部 class 不应该或不希望直接使用。

公平性在 Schedulers.from() 的 JavaDocs 中有解释。