我是 RX java 的新手,我一直在尝试使用 observeOn 和 subscribeOn 方法。我读过它们之间的区别在于它们在设置调度程序(observeOn)后影响整个链(subscribeOn)或仅影响链的一部分。那么为什么下面的代码执行得很好(打印当前线程):
Observable obs = Observable.from(Arrays.asList("element", "2nd element"));
obs.observeOn(Schedulers.newThread())
.map(x -> x.toString().toUpperCase())
.subscribe(x -> System.out.println("NT:" + Thread.currentThread().getName() + x));
虽然此代码不打印任何内容:
Observable obs = Observable.from(Arrays.asList("element", "2nd element"));
obs.subscribeOn(Schedulers.newThread())
.map(x -> x.toString().toUpperCase())
.subscribe(x -> System.out.println("NT:" + Thread.currentThread().getName() + x));
最佳答案
您确定此代码不打印任何内容
吗?
我试过这段代码:
Observable obs = Observable.from(Arrays.asList("element", "2nd element"));
obs.subscribeOn(Schedulers.newThread())
.map(x -> x.toString().toUpperCase())
.subscribe(x -> System.out.println("NT:" + Thread.currentThread().getName() + x));
Thread.sleep(5000);
输出:
NT:RxNewThreadScheduler-1ELEMENT
NT:RxNewThreadScheduler-12ND ELEMENT
也许你忘记了sleep
或者做一些其他的工作让应用程序等待新的RxJava
线程的完成?
关于java - RX Java - subscribeOn 和 observeOn 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51280900/