No need for multiple calls to subscribeOn ; in this case, the second call is functionally non-op, but still held on some resources for the duration of the sequence. For instance:
Observable.just(1) .map(v -> Thread.currentThread()) .subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.computation()) .toBlocking() .subscribe(System.out::println)
Print something like ... RxCachedThreadScheduler-2
You probably need to observeOn(Schedulers.computation()) , which moves the observation of each value (the List object in this case) to another stream.
source share