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

1 调度器(Scheduler)种类

1.1 RxJava线程介绍

默认情况下,

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上。

若多次执行 subscribeOn ,则只有一次起作用 。

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

2 onbserveOn

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

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

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

Rxjava2实战--第四章 Rxjava的线程操作的更多相关文章

  1. RxJava2实战---第七章 合并操作符和连接操作符

    RxJava2实战---第七章 合并操作符和连接操作符 RxJava的合并操作符: startWith():在数据序列的开头增加一项数据. merge:将多个Observable合并为一个. merg ...

  2. RxJava2实战---第五章 变换操作符和过滤操作符

    RxJava2实战---第五章 变换操作符和过滤操作符 RxJava的变换操作符主要包括以下几种: map():对序列的每一项都用一个函数来变换Observable发射的数据序列. flatMap() ...

  3. RxJava2实战---第六章 条件操作符和布尔操作符

    RxJava2实战---第六章 条件操作符和布尔操作符 RxJava的条件操作符主要包括以下几个: amb():给定多个Observable,只让第一个发射数据的Obsrvable发射全部数据. de ...

  4. Rxjava2实战--第三章 创建操作符

    Rxjava2实战--第三章 创建操作符 Rxjava的创建操作符 操作符 用途 just() 将一个或多个对象转换成发射这个或者这些对象的一个Observable from() 将一个Iterabl ...

  5. Spring实战第四章学习笔记————面向切面的Spring

    Spring实战第四章学习笔记----面向切面的Spring 什么是面向切面的编程 我们把影响应用多处的功能描述为横切关注点.比如安全就是一个横切关注点,应用中许多方法都会涉及安全规则.而切面可以帮我 ...

  6. 《GPU高性能编程CUDA实战》第四章 简单的线程块并行

    ▶ 本章介绍了线程块并行,并给出两个例子:长向量加法和绘制julia集. ● 长向量加法,中规中矩的GPU加法,包含申请内存和显存,赋值,显存传入,计算,显存传出,处理结果,清理内存和显存.用到了 t ...

  7. DirectX12 3D 游戏开发与实战第四章内容(上)

    Direct3D的初始化(上) 学习目标 了解Direct3D在3D编程中相对于硬件所扮演的角色 理解组件对象模型COM在Direct3D中的作用 掌握基础的图像学概念,例如2D图像的存储方式,页面翻 ...

  8. 4类Storage方案(AS开发实战第四章学习笔记)

    4.1 共享参数SharedPreferences SharedPreferences按照key-value对的方式把数据保存在配置文件中,该配置文件符合XML规范,文件路径是/data/data/应 ...

  9. 菜单Menu(AS开发实战第四章学习笔记)

    4.5 菜单Menu Android的菜单主要分两种,一种是选项菜单OptionMenu,通过按菜单键或点击事件触发,另一种是上下文菜单ContextMenu,通过长按事件触发.页面的布局文件放在re ...

随机推荐

  1. Vue快速学习_第五节

    axios安装及使用 网站文档地址:https://www.kancloud.cn/yunye/axios/234845 1.npm安装 cnpm install axios 2.// 在main.j ...

  2. MySQL 8下忘密码后重置密码

    解决方案:1):设置mysql为无密码启动  (修改MySQL的登录设置:vi /etc/my.cnf   在[mysqld]的段中加上一句:skip-grant-table)  2):重新启动mys ...

  3. JS 对浏览器相关的操作

    // 获取浏览器 宽高 var width = window.innerWidth || document.documentElement.clientWidth || document.body.c ...

  4. ES head

    第2种安装方式 第二种方式就是不通过Elasticsearch插件方式进行安装 1.下载elasticsearch-head的源码包 地址:https://github.com/mobz/elasti ...

  5. PHP类知识----静态属性和方法

    <?php class mycoach { public $name="陈培昌"; CONST hisage =; ; private $favorite = "喜 ...

  6. beeline启动时,错误 User: root is not allowed to impersonate root

    错误: beeline>!connect jdbc:hive2://192.168.33.01:10000 root rootConnecting to jdbc:hive2://192.168 ...

  7. .md(markdown)基础语法

    markdown基础语法笔记,方便翻看. 1. 标题 标题有3中写法,可混写: (1)# ***,前面#,后面文字,注意,#与文字间有空格,1-6个#分别表示h1-h6,h1.h2下有横线 (2)== ...

  8. 一些C++编码规范

    1.成员变量是引用类型,头文件只需向前声明对应类,不需包含类头文件,在实现文件中需要包含: 2.头文件声明变量和函数按照pulic.protected.private顺序: 3.成员变量声明,加 &q ...

  9. SpringCloud之网关 Gateway(五)

    前面我们在聊服务网关Zuul的时候提到了Gateway,那么Zuul和Gateway都是服务网关,这两个有什么区别呢? 1. Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix ...

  10. hdu 5791 Two 二维dp

    Two Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...