簡體   English   中英

在 RxJava 中,是通過可觀察的多線程發出事件嗎?

[英]In RxJava, is emitting event by observable multi-threaded?

RxJava 在幕后是多線程的,比如說如果下面的 observable 發出了事件 hello,它是通過創建一個新線程來實現的嗎?

Observable observable = Observable.just("Hello");

而如果是多線程的,JVM 可以創建的新線程的最大數量是否有限制,因此 Observable 的使用也可能會受到限制?

默認情況下,RxJava 中沒有任何東西是多線程的。 然而,通過使用Schedulers可以很容易地引入多線程。 例如,如果您這樣做:

Observable.just("Hello")
  .subscribeOn(Schedulers.computation())
  .subscribe(i -> System.out.println(i +  " " + Thread.currentThread().getName());

您會看到println調用發生在計算調度程序提供的線程上。 如果沒有subscribeOn調用,您會看到它在您的主線程中運行。

RxJava 提供了幾種調度器,每一種都有不同的屬性。 有一個 I/O 調度程序,它將首先為每個請求創建一個新線程,但一旦它們空閑就會重新使用以前創建的線程。 有一個計算調度程序(我在上面使用過),它使用固定大小的線程池等運行。如果提供的都不能滿足您的需求,您也可以編寫自己的。

我強烈建議您閱讀有關該主題的文檔,因為 RxJava 的並發方法故意與您可能習慣的方法有些不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM