java - 在 RxJava 中什么算作异步边界?

标签 java rx-java reactive-programming rx-java2

我目前正在深入研究 Java 线程的危险,特别是这些危险如何应用于 RxJava。感谢您的回答,但为了防止不可避免的 RTFM,我也希望引用所述手册。

我经常听到“异步边界”这个术语,我有一个大概的想法,但我还没有找到严格的定义。

这些示例中的异步边界在哪里?

// example 1
Observable.just(123)
         .map(i -> i + 1)
         .subscribe(System.out::println); 

// example 2
Observable.just(123)
         .observeOn(Schedulers.newThread())
         .map(i -> i + 1)
         .subscribe(System.out::println); 

// example 3
Observable.just(123)
          .subscribeOn(Schedulers.newThread())
          .map(i -> i + 1)
          .subscribe(System.out::println);

还有其他相关的示例吗?

最佳答案

如果 1) 它使用时间,2) 采用异步调度程序和/或 3) 涉及多个 react 源,则运算符是异步边界。

对于 1),这可能意味着下游可以在原始线程或标准默认调度程序上接收信号。示例:超时

对于 2),运算符(operator)采用异步调度程序并通过该调度程序路由事件和/或控制信号。除 Trampoline 之外的标准调度程序都是异步调度程序。示例:observeOnsubscribeOnunsubscribeOn

对于 3),涉及多个源,每个源都可以从自己的线程发出。然后可以在这些线程中的任何一个(甚至触发初始订阅的线程)上通知结果和下游,并且通常所有的赌注都取决于它将是什么线程。示例:mergeflatMap

除此之外,如果涉及 Flowable,运算符内部的背压可以充当异步边界,因为上游线程的发射必须与下游/任意线程的请求协调。在这种情况下,任何参与线程都可以负责信号发射,并且信号可以动态变化。示例:onBackPressureBufferobserveOncreate

关于java - 在 RxJava 中什么算作异步边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52330879/

相关文章:

java - 如何使用 Reactor 创建随机数生成器?

flutter - 使用 Flutter 和 Redux 或 AsyncRedux,如何将小部件与应用程序状态分离?

java - "java -server"和 "java -client"之间的真正区别?

java - 自定义 log4j2 附加程序在 java 11 中不起作用

java - 使用 Kotlin 的 RxJava - 如何同步 2 个异步方法,从 Java 重构

android - 更新到 Gradle 3.0.0-alpha1 时没有静态方法 lambda$onGoogleApiClientReady$0

javascript - 使用 RxJS 重置事件超时

java - 收集流时如何使用Guava的Multisets.toMultiSet()?

java - 将一维字符串数组转换为二维数组行中的每个元素

rx-java - 在 rxjava 中为 "else"或 "coallesce"链接可能