首页 > 解决方案 > 在 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();
        }
      }
}

标签: javarx-java

解决方案


它将在计算线程上执行,请参阅您的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);
}

推荐阅读