线程调度
RxJava 线程调度
Scheduler
Scheduler
是RxJava
的线程调度器,可以指定代码执行的线程。RxJava 内置了几种线程:
AndroidSchedulers.mainThread()
主线程Schedulers.immediate()
当前线程,即默认Scheduler
Schedulers.newThread()
启用新线程Schedulers.io()
IO 线程,内部是一个数量无上限的线程池,可以进行文件、数据库和网络操作。Schedulers.computation()
CPU 计算用的线程,内部是一个数目固定为 CPU 核数的线程池,适合于 CPU 密集型计算,不能操作文件、数据库和网络。
subscribeOn()
和observeOn()
可以用来控制代码的执行线程。
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.d(TAG, "OnSubscribe.call Thread -> " + Thread.currentThread().getName());
subscriber.onNext("message");
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) //这一句在J2EE中无法执行
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Log.d(TAG, "Subscriber.onNext Thread -> " + Thread.currentThread().getName());
}
});
根据打印出的 Log 可以得出结论: subscribeOn()指定 OnSubscribe.call()的执行线程,即 Observable 通知 Subscriber 的线程; observeOn()指定 Subscriber 回调的执行线程,即事件消费的线程。