代码之家  ›  专栏  ›  技术社区  ›  sagar suri

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

  •  0
  • sagar suri  · 技术社区  · 6 年前

    目前我正在学习 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();
            }
          }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   syntagma    6 年前

    它将在计算线程上执行,请参见您的这个修改版本 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);
    }