我目前正在深入研究 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 之外的标准调度程序都是异步调度程序。示例:observeOn
、subscribeOn
、unsubscribeOn
。
对于 3),涉及多个源,每个源都可以从自己的线程发出。然后可以在这些线程中的任何一个(甚至触发初始订阅的线程)上通知结果和下游,并且通常所有的赌注都取决于它将是什么线程。示例:merge
、flatMap
。
除此之外,如果涉及 Flowable,运算符内部的背压可以充当异步边界,因为上游线程的发射必须与下游/任意线程的请求协调。在这种情况下,任何参与线程都可以负责信号发射,并且信号可以动态变化。示例:onBackPressureBuffer
、observeOn
、create
关于java - 在 RxJava 中什么算作异步边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52330879/