Rxjava2实战--第四章 Rxjava的线程操做

Rxjava2实战--第四章 Rxjava的线程操做

1 调度器(Scheduler)种类

1.1 RxJava线程介绍

默认状况下,java

1.2 Scheduler

Sheduler 做用
single 使用定长为1的线程池(new ScheduledThread Pool(1)),重复利用这个线程
newThread 每次都启用线程,并 在新线程中执行操做
computation 使用固定的线程池(Fixed Scheduler Pool),大小为CPU核数,适用于CPU密集型计算
io 适合I/O操做(读写文件、读写数据库、网络信息交互等)所使用的Scheduler。行为模式和newThread()差很少,区别在于io()的内部实现是用一个无数量上限的线程池,,能够重用空闲的线程,所以多数状况下,io()比newThread()更有效率
trampoline 表示当即执行,若是当前线程有任务在执行,则会将其暂停,等插入进来的新任务执行完成以后,再接着执行原先未完成的任务。
Scheduleres.from 将java.util.concurrent.Executor转换成一个调度器实例, 便可以自定义一个Excutor来做为调度器

2 RxJava线程模型

RxJava的被观察者们在使用操做符时能够利用线程调度器---Scheduler来切换线程。数据库

2.1 线程调度器

2.2 线程调度

默认状况下不作任何线程处理, Observable Observer 处于同一线程中。若是想要切换线 程,则能够使用 subscribeOn()和 observeOn()。网络

1 subscribeOn线程

subscribeOn 经过接收一个 Scheduler 参数,来指定对数据的处理运行在特定的线程调度器 Scheduler上。server

若屡次执行 subscribeOn ,则只有一次起做用 。对象

在RxJava 链式操做 中, 数据的处理是自下而上的 ,这点与数据发射正好相反。若是屡次 调用 subcribeOn(),则最上面的线程切换最晚 ,因此就变成了只有第一次切换线程才有效。io

2 onbserveOntable

observeOn 一样接收一个 Scheduler 参数 ,用来指定下游操做运行在特定的线程调度器 Scheduler 上。效率

若屡次执行 observeOn(),则每次都起做用 ,线程会一直切换。线程池

若下游屡次调用observeOn(),则线程会一直切换。每次切换线程,都会把对应的Observer对象的各个方法的处理执行在指定的线程中。

相关文章
相关标签/搜索