[英]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.