RxJava中的线程转换主要通过下面两个方法:

1.subscribeOn

2.observeOn

一、subscribeOn

1.调用一次subscribeOn时:

Observable observable;
Schedulers schedulers;
Observer observer;
observable.subscribeOn(schedulers).subscribe(observer)

通过解析源码可转化为:

observer.onSubscribe();
schedulers线程{
observable.subscribe(observer)
}

在原线程调用observer的onSubscribe 方法,并在schedulers的线程中调用observable 的subscribe 方法。

2.当多次调用subscribeOn时:

Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.subscribeOn(schedulers1)
.subscribeOn(schedulers2)
.subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers2线程{
schedulers1线程{
observable.subscribe(observer)
}
}

所以subscribOn只有第一次有效。

二、observeOn

1.调用一次observeOn

Observable observable;
Schedulers schedulers;
Observer observer;
observable.observeOn(schedulers).subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers线程{
observer.next()
observer.complete()
}

当多次调用observeOn时:

Observable observable;
Schedulers schedulers1;
Schedulers schedulers2;
Observer observer;
observable.observeOn(schedulers1)
.observeOn(schedulers2)
.subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers1线程{
schedulers2线程{
observer.next()
observer.complete()
}
}

当时用map操作符时:

observable.map()
.observeOn(schedulers1)
.map(function)
.observeOn(schedulers2)
.subscribe(observer)

可转化为:

observer.onSubscribe();
schedulers1线程{
function.apply()
schedulers2线程{
observer.next()
observer.complete()
}
}

RxJava线程控制的更多相关文章

  1. 【Android】RxJava的使用(四)线程控制 —— Scheduler

    并没有关系的图 前言 经过前几篇的介绍,对RxJava对模式有了一定的理解:由Observable发起事件,经过中间的处理后由Observer消费.(对RxJava还不了解的可以出门左拐)之前的代码中 ...

  2. Java并发1——线程创建、启动、生命周期与线程控制

    内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 ...

  3. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. linux线程控制&线程分离

    线程概念 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元. 线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立 ...

  5. Win32多线程编程(2) — 线程控制

    Win32线程控制只有是围绕线程这一内核对象的创建.挂起.恢复.终结以及通信等操作,这些操作都依赖于Win32操作系统提供的一组API和具体编译器的C运行时库函数.本篇围绕这些操作接口介绍在Windo ...

  6. Linux学习--线程控制

    关于线程控制,主要就是几个模块,我们一个一个消灭.消化: 一.线程创建: 1.先来看看在Linux环境下的线程创建函数: 分析:意思很明显: 1.函数名是 pthread_create  : 2.功能 ...

  7. MySQL--InnoDB并发线程控制

    InnoDB并发线程控制 MySQL InnoDB存储引擎提供innodb_thread_concurrency来控制进入InnoDB 存储引擎的线程数,以限制InnoDB存储引擎层的并发量. 当in ...

  8. 线程&线程控制

    线程基本概念: 1 线程 (1)概念:linux下没有真正的线程,所谓的线程都是通过进程的pcb模拟的,因此linux下的线程也称为“轻量级进程”,之前我们所说的进程现在看来,可以理解为:只有一个线程 ...

  9. android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)

    依照以下的理解就是handler与ui线程有一定的关联能够由于更新界面仅仅能在主线程中全部更新界面的地方能够在接受消息的handleMessage那里还有更新界面能够在handler.port(new ...

随机推荐

  1. 微服务网关Zuul过滤器Filter

    Zuul本质 Zuul是一个网关,关于网关的介绍参考:亿级流量架构之网关设计思路.常见网关对比, 可知Zuul是一个业务网关, 而深入了解Zuul, 基本就是一系列过滤器的集合: Zuul的过滤器 下 ...

  2. Python:垃圾回收

    有很多不同的方法来实现垃圾回收,例如跟踪,引用计数,转义分析,时间戳和心跳信号等.不同的语言依赖于不同的垃圾回收实现,例如,有些将其与编译器和运行时系统集成在一起.而其他语言则可能需要事后设置,甚至可 ...

  3. java注解基础入门

    前言 这篇博客主要是对java注解相关的知识进行入门级的讲解,包括**,核心内容主要体现在对java注解的理解以及如何使用.希望通过写这篇博客的过程中让自己对java注解有更深入的理解,在工作中可以巧 ...

  4. 攻防世界 reverse babymips

    babymips   XCTF 4th-QCTF-2018 mips,ida中想要反编译的化需要安装插件,这题并不复杂直接看mips汇编也没什么难度,这里我用了ghidra,直接可以查看反编译. 1 ...

  5. java例题_40 字母字符串转数组后排序

    1 /*40 [程序 40 字符串排序] 输入一个字符串数组,按照字母表的降序对这些字符串进行排序. 2 题目:字符串排序. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个纯字母的字符串 7 ...

  6. SCIP:构造过程抽象--面向对象的解释

    心智的活动,除了尽力产生各种简单的认知之外,主要表现为如下三个方面:(1)将若干简单认知组合为一个复合的认识,由此产出各种复杂的认知.(2)将两个认知放在一起对照,不管他们如何简单或者复杂,在这样做时 ...

  7. 手写无缝轮播banner

    <div class="banner"> <ul class="clearfloat bannerul xin" id="xin&q ...

  8. 翻译:《实用的Python编程》08_03_Debugging

    目录 | 上一节 (8.2 日志) | 下一节 (9 包) 8.3 调试 调试建议 假设程序崩溃了: bash % python3 blah.py Traceback (most recent cal ...

  9. java面试-Java内存模型(JMM)

    p.p1 { margin: 0; font: 15px Helvetica } 一.并发编程两个关键问题 线程之间如何通信.同步.java并发采用的是共享内存模型 二.JMM内存模型的抽象结构 描述 ...

  10. Dynamics CRM调用选择用户弹窗

    在开发Dynamics CRM的部分场景时我们会遇到一些需要去锁定用户的操作,所以就需要使用Javascript把用户的弹窗弹出来.具体做法如下 我们需要拼接一个弹出选择记录框的url Url格式:C ...