RxJava doOnComplete(…)运行在哪个线程上

By | 2019年7月11日

observerOn(…)会创建一个新的Stream,doOnComplete(…)相对于observeOn(…)的前后关系,决定doOnComplete(…)运行在哪个线程上。

  • 之前:运行在前面Stream所使用的线程。
  • 之后:运行在新建Stream所使用的线程。

Example:

Observable.just(1)
    .subscribeOn(Schedulers.io())
    .doOnNext(val -> System.out.println("doOnNext: " + Thread.currentThread()))
    .doOnComplete(() -> System.out.println("doOnComplete1: " + Thread.currentThread()))
    .observeOn(Schedulers.computation())
    .doOnComplete(() -> System.out.println("doOnComplete2: " + Thread.currentThread()))
    .subscribe(val -> System.out.println("subscribe: " + Thread.currentThread()));

输出结果:

image