线程调度
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 回调的执行线程,即事件消费的线程。
