RxJava系列(二)Scheduler线程调度器
2019独角兽企业重金招聘Python工程师标准>>>
#RxJava线程调度器
##Scheduler简介:
在不指定线程的情况下,RxJava遵循的是线程不变原则,也就是说在哪个线程调用subscribe(),就在哪个线程产生事件,在哪个线程产生时间,就在哪个线程消费事件,如果想要在产生事件或者是消费事件的时候切换线程,那么就得用到今天要说的线程调度器Scheduler
在RxJava中Scheduler就相当于线程控制器,RxJava通过它来指定每一段代码应该运行在什么样的线程中
##Scheduler分类:
目前RxJava给我们提供了四种不同类型的线程调度器。以方便我们使用
- Scheduler.immediate():(默认的Scheduler)直接在当前线程运行、相当于不指定线程
- Scheduler.newThread():总是启用新的线程,并运行在新线程中
- Scheduler.io():I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。
- Scheduler.computation():计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU
在RxAndroid中还有一个专用的AndroidSchedulers.mainThread(),它所指定的操作将在主线程中运行
##Scheduler的用法:
可以使用 subscribeOn() 和 observeOn() 两个方法来对线程进行控制了。subscribeOn(): 指定Observable(被观察者)所在的线程,或者叫做事件产生的线程。 * observeOn(): 指定 Observer(观察者)所运行在的线程,或者叫做事件消费的线程。
Observable.create(new ObservableOnSubscribe<Integer>() {[@Override](https://my.oschina.net/u/1162528)public void subscribe(ObservableEmitter<Integer> e) throws Exception {Log.d("所在的线程:",Thread.currentThread().getName());Log.d("发送的数据:", 1+"");e.onNext(1);}}).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) /.subscribe(new Consumer<Integer>() {[@Override](https://my.oschina.net/u/1162528)public void accept(Integer integer) throws Exception {Log.d("所在的线程:",Thread.currentThread().getName());Log.d("接收到的数据:", "integer:" + integer);}});###感谢知行办公团队同事的帮助
- 【总监】十二春秋之,3483099@qq.com;
- 【Master】zelo,616701261@qq.com;
- 【运营】运维艄公,897221533@qq.com;
- 【产品设计】流浪猫,364994559@qq.com;
- 【体验设计】兜兜,2435632247@qq.com;
- 【iOS】淘码小工,492395860@qq.com;iMcG33K,imcg33k@gmail.com;
- 【Android】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com;
- 【java】首席工程师MR_W,feixue300@qq.com;
- 【测试】土镜问道,847071279@qq.com;
- 【数据】喜乐多,42151960@qq.com;
- 【安全】保密,你懂的。
转载于:https://my.oschina.net/u/2561871/blog/1537411
总结
以上是生活随笔为你收集整理的RxJava系列(二)Scheduler线程调度器的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 前端笔试题面试题记录(下)
- 下一篇: Java Web学习总结(31)——全站