RxJava中的线程转换主要通过下面两个方法:

1.subscribeOn

2.observeOn

一、subscribeOn

1.调用一次subscribeOn时:

Observable observable;
Schedulers schedulers;
Observer observer;
observable.subscribeOn(schedulers).subscribe(observer)

通过解析源码可转化为:

observer.onSubscribe();
schedulers线程{observable.subscribe(observer)
}

在原线程调用observer的onSubscribe 方法,并在schedulers的线程中调用observable 的subscribe 方法。

2.当多次调用subscribeOn时:

Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.subscribeOn(schedulers1).subscribeOn(schedulers2).subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers2线程{schedulers1线程{observable.subscribe(observer)}
}

所以subscribOn只有第一次有效。

二、observeOn

1.调用一次observeOn

Observable observable;
Schedulers schedulers;
Observer observer;
observable.observeOn(schedulers).subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers线程{observer.next()observer.complete()
}

当多次调用observeOn时:

Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.observeOn(schedulers1).observeOn(schedulers2).subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers1线程{schedulers2线程{observer.next()observer.complete()}
}

当时用map操作符时:

observable.map().observeOn(schedulers1).map(function).observeOn(schedulers2).subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers1线程{function.apply()schedulers2线程{observer.next()observer.complete()}
}

转载于:https://www.cnblogs.com/zhisuoyu/p/5731780.html

RxJava线程控制相关推荐

  1. RXJava之线程控制Scheduler(四),Android面试题

    前面讲到了,可以利用 subscribeOn() 结合 observeOn() 来实现线程控制,让事件的产生和消费发生在不同的线程.可是在了解了 map() flatMap() 等变换方法后,有些好事 ...

  2. RxJava使用(三)Scheduler 线程控制

    前言 在默认情况下,即在不指定线程的情况下,RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件:在哪个线程生产事件,就在哪个线程消费事件. 如果需要 ...

  3. 【Android】RxJava的使用(四)线程控制 —— Scheduler

    前言 经过前几篇的介绍,对RxJava对模式有了一定的理解:由Observable发起事件,经过中间的处理后由Observer消费.(对RxJava还不了解的可以出门左拐) 之前的代码中,事件的发起和 ...

  4. 给初学者的RxJava2.0教程(二):【线程控制】

    CSD转载地址:http://blog.csdn.net/qq_23179075/article/details/79256089 作者:Season_zlc 链接:https://www.jians ...

  5. 孤荷凌寒自学python第三十八天初识python的线程控制

    孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看着 ...

  6. Linux系统编程之进程与线程控制原语对比

    Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...

  7. Java里的线程控制

    这篇文章接着上篇文章<<java 线程简介>> 写的. http://blog.csdn.net/nvd11/article/details/19118683 上一篇文章提到, ...

  8. Win32多线程编程(2) — 线程控制

    Win32线程控制只有是围绕线程这一内核对象的创建.挂起.恢复.终结以及通信等操作,这些操作都依赖于Win32操作系统提供的一组API和具体编译器的C运行时库函数.本篇围绕这些操作接口介绍在Windo ...

  9. Linux 多线程(一)线程概念:线程概念、线程与进程、线程间的独有与共享、多线程与多进程、线程控制

    线程概念 线程与进程 线程间的独有与共享 多线程与多进程 线程控制 线程概念 什么是线程 线程是进程中的一条执行流,执行程序中的某部分代码.linux下没有具体实现的线程,只有库函数用pcb来实现的线 ...

最新文章

  1. 作为项目经理,如何处理好与不同类型客户之间的关系?
  2. php 数据显示,数据显示处理,该怎么处理
  3. Jeewx 捷微管家操作配置文档(开源版本)
  4. python类型检测最终指南--Typing的使用
  5. 影子卫士汉化语言包 res.ini
  6. Launcher folder、foldericon
  7. Redis缓存问题总结
  8. Oracle Dataguard基于rac主库搭建rac备库
  9. 让你对DC完全了解的88条名词解释(转)
  10. word文件的样式如何修改?
  11. 网上药店领导品牌_药康网
  12. jme-再现虎式坦克
  13. Android实现Line登录分享
  14. android--手机震动--Vibrator
  15. mac u盘格式化 linux系统文件,U盘重新安装Mac OS系统教程
  16. DataPipeline丨LinkedIn元数据之旅的最新进展—Data Hub
  17. Windows个人电脑的自我防护(包括nmap的扫描端口和cmd的跃点追踪)
  18. 花王洁霸洗衣粉能洗干净衬衣领子
  19. [Linux]基础知识(一)
  20. 【考生说】持之以恒才是胜利的推动器、一周时间通过C认证的同学怎么说

热门文章

  1. java发送文件_java 模拟http发送文件和参数
  2. nginx配置vue项目500_一个Nginx部署多个vue前端项目总结
  3. c语言输出每个数占10列宽,杭州师范大学C语言试题第1套介绍.doc
  4. 生成私钥 p q rsa_【安全】理解 RSA 算法
  5. 自制串口示波器小工具
  6. 工控交换机和工业级交换机是怎么区别的,具体有哪些区别?分别应用在什么领域?
  7. 什么是模拟量光端机?模拟光端机品牌有哪些?
  8. [渝粤教育] 广东-国家-开放大学 21秋期末考试建筑工程概预算10326k2
  9. 【渝粤教育】国家开放大学2018年春季 0273-21T中国现代文学 参考试题
  10. 2021年春季学期期末统一考试 劳动与社会保障法(本) 试题