RxJava zip 源码分析

zip 方法接收多个数据源(也就是 observable)和一个用来合并数据的 BiFunction 接口。

zip 会创建一个 Observale 对象,在这个对象被订阅时,会为每个数据源创建一个 Observer,你的数据源发出的数据都会被这些 Observer 接收。

zip 创建的每一个 Observer 都有一个队列,接收到数据先放到队列里,然后去检查其它 Observer 有没有数据。如果每个 Observer 的队列里都有至少一个数据,就把它们都取出来交给 BiFunction 合并,然后传给下游。

由于你传进去的数据源可能会异步的发送数据,为了并发时数据的正确,检查数据的代码必须要做同步。RxJava 巧妙的使用原子变量而不是 synchronized 来保证检查数据的代码高效、安全的被多个线程访问。

具体的实现可以看 RxJava 的 zip 源码实现,也可以看我这个用简单方式模仿 RxJava 的项目:地址

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,260评论 19 139
  • 转载自:https://xiaobailong24.me/2017/03/18/Android-RxJava2.x...
    Young1657阅读 6,169评论 1 9
  • 前言 相信很多做Android或是Java研发的同学对RxJava应该都早有耳闻了,尤其是在Android开发的圈...
    丿Ace灬Seong阅读 5,674评论 1 8
  • 前面用的苹果5s,朋友送的,因为内存小,老是发烫,后来送给侄儿用了,可是忘了导出照片,那里面有很多时间记忆,舍不得...
    彦希妈阅读 2,990评论 0 1
  • 因为浏览器的同源策略保护机制,我们不能随意运行其他不同源下的js脚本,当我们需要跨域运行js脚本时可以使用以下方法...
    曾祥辉阅读 1,486评论 0 0

友情链接更多精彩内容