默认状况下,java
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来做为调度器 |
RxJava的被观察者们在使用操做符时能够利用线程调度器---Scheduler来切换线程。数据库
默认状况下不作任何线程处理, Observable Observer 处于同一线程中。若是想要切换线 程,则能够使用 subscribeOn()和 observeOn()。网络
1 subscribeOn线程
subscribeOn 经过接收一个 Scheduler 参数,来指定对数据的处理运行在特定的线程调度器 Scheduler上。server
若屡次执行 subscribeOn ,则只有一次起做用 。对象
在RxJava 链式操做 中, 数据的处理是自下而上的 ,这点与数据发射正好相反。若是屡次 调用 subcribeOn(),则最上面的线程切换最晚 ,因此就变成了只有第一次切换线程才有效。io
2 onbserveOntable
observeOn 一样接收一个 Scheduler 参数 ,用来指定下游操做运行在特定的线程调度器 Scheduler 上。效率
若屡次执行 observeOn(),则每次都起做用 ,线程会一直切换。线程池
若下游屡次调用observeOn(),则线程会一直切换。每次切换线程,都会把对应的Observer对象的各个方法的处理执行在指定的线程中。