运行 与 Observable 在同一线程中的 subscribeOn 操作
Running subscribeOn action in the same thread as Observable
我需要 运行 subscribeOn
在与 Observable
相同的线程中执行操作。我找到了解决方案,但它似乎不是最好的。基本上我使用相同的 scheduler
作为初始 observable
和 observable
其中 doOnSubscribe
returns:
Scheduler singleThreadScheduler = Schedulers.from(Executors.newSingleThreadExecutor());
Observable<Object> obs = Observable.create(subscriber -> {
System.out.println("onNext at: " + Thread.currentThread());
subscriber.onNext(new Object());
subscriber.onCompleted();
}).subscribeOn(singleThreadScheduler).observeOn(Schedulers.newThread());
obs = obs.doOnSubscribe(() -> System.out.println("doOnSubscribe at: " + Thread.currentThread())).subscribeOn(singleThreadScheduler);
obs.subscribe(o -> {
System.out.println("result at: " + Thread.currentThread());
});
日志:
doOnSubscribe at: Thread[pool-1-thread-1] //runs on the same thread
onNext at: Thread[pool-1-thread-1] //runs on the same thread
result at: Thread[RxNewThreadScheduler-1]
是否有更好或更标准的方法来实现它?
正如 akarnokd 指出的,我在问题中提到的解决方案只有一个。
我需要 运行 subscribeOn
在与 Observable
相同的线程中执行操作。我找到了解决方案,但它似乎不是最好的。基本上我使用相同的 scheduler
作为初始 observable
和 observable
其中 doOnSubscribe
returns:
Scheduler singleThreadScheduler = Schedulers.from(Executors.newSingleThreadExecutor());
Observable<Object> obs = Observable.create(subscriber -> {
System.out.println("onNext at: " + Thread.currentThread());
subscriber.onNext(new Object());
subscriber.onCompleted();
}).subscribeOn(singleThreadScheduler).observeOn(Schedulers.newThread());
obs = obs.doOnSubscribe(() -> System.out.println("doOnSubscribe at: " + Thread.currentThread())).subscribeOn(singleThreadScheduler);
obs.subscribe(o -> {
System.out.println("result at: " + Thread.currentThread());
});
日志:
doOnSubscribe at: Thread[pool-1-thread-1] //runs on the same thread
onNext at: Thread[pool-1-thread-1] //runs on the same thread
result at: Thread[RxNewThreadScheduler-1]
是否有更好或更标准的方法来实现它?
正如 akarnokd 指出的,我在问题中提到的解决方案只有一个。