在 RxJava 中,是否通过可观察的多线程发出事件?



RxJava 多线程在幕后,假设下面的可观察对象发出了事件 hello,它是否通过创建新线程来实现?

Observableobservable = Observable.just("Hello"(;

如果它是多线程的,JVM可以创建的最大新线程数是否有任何限制,因此Observable的使用也可能受到限制?

默认情况下,RxJava 中没有任何内容是多线程的。但是,通过使用调度程序,可以轻松引入多线程。例如,如果您这样做:

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

您会看到println调用发生在计算计划程序提供的线程上。如果没有subscribeOn调用,您将看到它在主线程中运行。

RxJava 提供了几种类型的调度程序,每种调度程序都有不同的属性。有 I/O 调度程序,它将从为每个请求创建一个新线程开始,但在它们空闲后将重用以前创建的线程。有一个计算调度程序(我在上面使用过(,它使用固定大小的线程池等进行操作。如果提供的方法都不能满足您的需求,您也可以编写自己的代码。

我强烈建议阅读有关此主题的文档,因为 RxJava 的并发方法故意与您习惯的方法略有不同。

最新更新