Rx java Rx2 blockingFirst()不';行不通

Rx java Rx2 blockingFirst()不';行不通,rx-java,rx-android,rx-java2,reactivex,Rx Java,Rx Android,Rx Java2,Reactivex,我正在介绍rx世界,我想了解为什么订阅newThread时阻塞不起作用。例如: 这是有效的: int i = Observable.fromArray(1,2,3,4).blockingFirst(); 这不起作用: int i = Observable.just(1,2,3,4) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()).blockingFirst()

我正在介绍rx世界,我想了解为什么订阅newThread时阻塞不起作用。例如:

这是有效的:

int i = Observable.fromArray(1,2,3,4).blockingFirst();
这不起作用:

int i = Observable.just(1,2,3,4)
      .subscribeOn(Schedulers.newThread())
      .observeOn(AndroidSchedulers.mainThread()).blockingFirst();
如果第二种情况可行的话


谢谢;)

操作员
observeOn(AndroidSchedulers.mainThread())
将在Android应用程序的主线程中对所有发出的项目进行排队。如果在主线程中执行上述代码段,线程将在
blockingFirst
方法中阻塞,并且将没有机会执行项目的排队指令-这是一个死锁

通常,在Rx代码中使用
阻塞
,是一种反模式;保持被动模式并执行以下操作更容易:

Observable
.just(1,2,3,4)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(i -> {...})
.subscribe();

当我使用
.observeOn(Schedulers.io())
时,我也遇到了这个问题。