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

问题描述 投票:1回答:1

RxJava是否在后台进行了多线程处理,例如,如果下面的可观察对象发出了事件hello,是否通过创建新线程来完成?

Observable observable = Observable.just(“ Hello”);

并且,如果它是多线程的,则关于JVM可以创建的新线程的最大数量是否有限制,因此对Observable的使用也可能受到限制?

java rx-java
1个回答
1
投票

默认情况下,RxJava中没有多线程的。但是,可以使用Schedulers轻松引入多线程。例如,如果您这样做:

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

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

RxJava提供了几种类型的调度程序,每种都有不同的属性。有一个I / O调度程序,它将从为每个请求创建一个新线程开始,但是一旦它们释放就将重用以前创建的线程。有一个计算调度程序(我在上面使用过),它与固定大小的线程池等配合使用。如果提供的程序都不满足您的需要,您也可以编写自己的程序。

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

© www.soinside.com 2019 - 2024. All rights reserved.