Чем отличается subscribeOn и observeOn в RxJava?

Чем отличается subscribeOn и observeOn в RxJava?
subscribeOn() – задает Scheduler, на котором выполняется подписка на Observable. Другими словами, код метода Observable.create() выполняется в потоке, заданном subscribeOn(). Scheduler, который задает subscribeOn() действует от создания Observable и вниз по цепочке вызовов RxJava до первого observeOn(). Место вызова subscribeOn() в цепочке не имеет значения.
Если subscribeOn() вызывается несколько раз на одном Rx-стриме, то в большинстве случаев только первый вызов имеет эффект.

observeOn() – задает Scheduler, на котором выполняются операторы, следующие после observeOn().
В Rx-стриме может быть несколько observeOn(), каждый из которых будет менять поток выполнения.