在 RxJava 中,Observable 是否默认在计算线程上运行?



目前我正在学习RxJava,只是被一个基本的疑问所困。请参阅下面的代码。我没有使用任何subscribeOn().下面的代码是在主线程上执行还是在计算线程上执行?

import io.reactivex.Observable;
import java.util.concurrent.TimeUnit;
public class Launcher {
public static void main(String[] args) {
Observable<Long> secondIntervals =
Observable.interval(1, TimeUnit.SECONDS);
secondIntervals.subscribe(s -> System.out.println(s));
/* Hold main thread for 5 seconds
so Observable above has chance to fire */
sleep(5000);
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

它将在计算线程上执行,请参阅main方法的修改版本:

public static void main(String[] args) {
Observable<Long> secondIntervals =
Observable.interval(1, TimeUnit.SECONDS);
secondIntervals.subscribe(s -> System.out.println("Observable thread id: "
+ Thread.currentThread().getId()));
System.out.println("Main thread id: " + Thread.currentThread().getId());
/* Hold main thread for 5 seconds
so Observable above has chance to fire */
sleep(5000);
}