RxJava是否在后台进行了多线程处理,例如,如果下面的可观察对象发出了事件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的并发方法故意与您可能习惯的有所不同。