Java 使用即时调度器和根本不使用调度器之间的区别

Java 使用即时调度器和根本不使用调度器之间的区别,java,rx-java,reactive-programming,Java,Rx Java,Reactive Programming,使用即时计划程序和不使用有什么区别 Observable.create(subscriber -> subscriber.onNext(new Object())).subscribeOn(Schedulers.immediate()).subscribe(); //vs Observable.create(subscriber -> subscriber.onNext(new Object())).subscribe(); 即时计划程序使用SleepingAction并立即运行:

使用
即时计划程序
和不使用有什么区别

Observable.create(subscriber -> subscriber.onNext(new Object())).subscribeOn(Schedulers.immediate()).subscribe();
//vs
Observable.create(subscriber -> subscriber.onNext(new Object())).subscribe();
即时计划程序使用
SleepingAction
并立即运行:

this.schedule(new SleepingAction(action, this, execTime));
但这似乎不是立即的,可能会有延迟:

long delay = this.execTime - this.innerScheduler.now();
Thread.sleep(delay);

所以,使用
即时调度器与根本不使用调度器的区别在于可能的延迟,这是对的吗?

这是正确的,但是这个延迟选项并不是scheduler.Immediate()有用的原因

Schedulers.immediate()
可用于提供带有依赖注入的
observeble
的同步变体。 例如,拥有这样的类:

public class ServiceObservable {

    private final Scheduler subscribeOnScheduler;
    private final Scheduler observeOnScheduler;

    public ServiceObservable(Scheduler subscribeOnScheduler, Scheduler observeOnScheduler) {
        this.subscribeOnScheduler = subscribeOnScheduler;
        this.observeOnScheduler = observeOnScheduler;
    }

    public Observable<ServiceData> getServiceDataObservable() {
        return serviceDataObservable
                .observeOn(observeOnScheduler)
                .subscribeOn(subscribeOnScheduler);
    }
}
公共类服务可观察{
专用最终调度器订阅调度器;
专用最终调度器observeOnScheduler;
公共服务可观察(调度程序订阅调度程序、调度程序观察调度程序){
this.subscribeOnScheduler=subscribeOnScheduler;
this.observeOnScheduler=observeOnScheduler;
}
公共可观测getServiceDataObservable(){
返回serviceDataObservable
.observeOn(observeOnScheduler)
.subscribeOn(subscribeOnScheduler);
}
}
您可能希望在生产代码中创建此对象,如下所示:

ServiceObservable ServiceObservable=newServiceObservable(Schedulers.io(),AndroidSchedulers.mainThread())

在这样的测试中


ServiceObservable ServiceObservable=新的ServiceObservable(Schedulers.immediate(),Schedulers.immediate())

最好使用
调度程序.trampoline()
进行单元测试。由于immediate中的阻塞睡眠,有一个计划将其从2.x中完全删除。来源:
trampoline()
也使用阻塞睡眠,但它比
立即
的优点是,您可以递归地使用它安排时间。您指的是什么阻塞睡眠?