RXJava——线程控制:Scheduler (二)
2016-06-28 10:01
204 查看
原文链接:http://gank.io/post/560e15be2dca930e00da1083
除了灵活的变换,RxJava 另一个牛逼的地方,就是线程的自由控制。
1) Scheduler 的 API (二)
前面讲到了,可以利用
答案是:能。因为
如上,通过
不过,不同于
又有好事的(其实还是当初的我)问了:如果我非要调用多次
这个问题先放着,我们还是从 RxJava 线程控制的原理说起吧。
除了灵活的变换,RxJava 另一个牛逼的地方,就是线程的自由控制。
1) Scheduler 的 API (二)
前面讲到了,可以利用
subscribeOn()结合
observeOn()来实现线程控制,让事件的产生和消费发生在不同的线程。可是在了解了
map()
flatMap()等变换方法后,有些好事的(其实就是当初刚接触 RxJava 时的我)就问了:能不能多切换几次线程?
答案是:能。因为
observeOn()指定的是
Subscriber的线程,而这个
Subscriber并不是(严格说应该为『不一定是』,但这里不妨理解为『不是』)
subscribe()参数中的
Subscriber,而是
observeOn()执行时的当前
Observable所对应的
Subscriber,即它的直接下级
Subscriber。换句话说,
observeOn()指定的是它之后的操作所在的线程。因此如果有多次切换线程的需求,只要在每个想要切换线程的位置调用一次
observeOn()即可。上代码:
Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定 .subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()) .map(mapOperator) // 新线程,由 observeOn() 指定 .observeOn(Schedulers.io()) .map(mapOperator2) // IO 线程,由 observeOn() 指定 .observeOn(AndroidSchedulers.mainThread) .subscribe(subscriber); // Android 主线程,由 observeOn() 指定
如上,通过
observeOn()的多次调用,程序实现了线程的多次切换。
不过,不同于
observeOn(),
subscribeOn()的位置放在哪里都可以,但它是只能调用一次的。
又有好事的(其实还是当初的我)问了:如果我非要调用多次
subscribeOn()呢?会有什么效果?
这个问题先放着,我们还是从 RxJava 线程控制的原理说起吧。
相关文章推荐
- JAVA 快递查询接口API调用-快递鸟接口
- Java中Properties类
- eclipse package,source folder,folder区别及相互转换
- JAVA 泛型,集合使用方法
- Spring实现AOP的方式
- java随机动态生成汉字验证码图片的实例代码分享
- java数据库操作
- java编程相关总结(一)
- java httpclient发送json 请求 ,go服务端接收
- java调整日期时间显示格式
- HotSpot是什么?
- spring<context:component-scan>使用说明
- java annotation 自定义注释
- eclipse使用非系统默认JDK
- struts2的核心和工作原理
- java list转json
- Java MD5 BASE64加密工具类
- Java泛型中通配符的使用
- AES加密解密通用版Object-C / C# / JAVA
- JAVA开发Web Service几种框架介绍