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()
也使用阻塞睡眠,但它比立即
的优点是,您可以递归地使用它安排时间。您指的是什么阻塞睡眠?