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 的并发方法故意与您习惯的方法略有不同。