2016-10-07 80 views
1

比方說,我剝離了幾個事件訂閱,像這樣:RxJava是多線程的嗎?

event.subscribe((eventObj) -> { 
      // do stuff 
     }); 

event2.subscribe((eventObj) -> { 
      // do more stuff 
     }); 

這是隱式創建兩個線程?

+0

我發現了以下內容:http://www.grahamlea.com/2014/07/rxjava-threading-examples/,答案是「否」,默認情況下RxJava不會創建新的線程。 – mtyson

回答

1

訂閱行爲本身不會在另一個線程上開始計算,而是Observable本身的定義決定了線程行爲。

作爲示例

Observable 
    .just(1, 2, 4) 
    .doOnNext(System.out::println) 
    .subscribe(); 

將同步運行。

您可以使用subscribeOnobserveOn在其他線程上引入計算,但請注意,某些Observable源和運算符的默認值表示它們將在除訂閱發生的線程之外的另一線程上運行。一個例子是Observable.interval(1, TimeUnit.SECONDS),它每秒發出一個遞增整數。此Observable的默認調度程序是Schedulers.computation。訂閱發生時,從與Schedulers.computation關聯的線程池中選擇一個線程,並在該線程上發生排放。每個運營商的javadoc都會提到線程行爲(可能根據Scheduler s),因此請檢查您是否確定。

+0

太棒了,謝謝。 – mtyson

1

RX Java默認情況下不會爲訂閱創建新線程,請檢查Scheduler文檔以引入多線程行爲。