目录
1. Rx简介
2. Rxjava基础知识
3. Rxjava创建操作符
4. Rxjava的线程操作
5. Rxjava变换过滤操作符
6. Rxjava合并、链接操作符
7. Rxjava条件和布尔操作符
(一):Rxjava中的线程
Rxjava是一个异步线程库,异步是它的一大特色。默认情况下rxjava全部的执行是顺序同步的,但是在实际开发中,我们更希望的是Observable发射数据,操作加工数据是在后台处理的,而响应是在当前线程实现的,这里会涉及到使用多线程来操作rxjava,我们可以使用rxjava的调度器(Scheduler)来实现。
(二):Scheduler
Scheduler是rxjava中对线程控制器的一个抽象,rxjava内置了多个Scheduler,它基本满足绝大多数使用场景。
Scheduler | 作用 |
---|---|
single | 使用定长为1的线程池,重复利用这个线程 |
newThread | 每次都启用新线程,并在新线程中执行 |
computation | 使用固定长度的线程池,大小为CPU的核数,适用于CPU密集型计算 |
io | 适合I/O操作(读写文件,读写数据库,网络访问等) |
trampoline | 直接在当前线程运行,如果当前线程有其他任务正在执行,会先暂停其他任务 |
Schedulers.from | 将java.util.concurrent.Executor转换成一个调度器实例,即可以自定义一个Executor来作为调度器 |
Schedulers
Schedulers是rxjava中的一个静态工厂类,通过Schedulers可以获得多种不同的Scheduler
Schedulers.io(), Schedulers.newThead(); Schedulers.computation(), Schedulers.single(),Schedulers.trampoline()
还可以自定义Scheduler,支持使用Executor来作为调度器
//Schedulers自定义scheduler源码
@NonNull
public static Scheduler from(#NonNull Executor executor){
return enw ExecutorScheduler(executor);
}
(三):线程调度
默认情况Observable与Observer处于同一个线程,可以使用SubscribeOn()和observeOn()来指定执行的线程
1:subscribeOn
它接受一个Scheduler参数,用来指定对数据发送,数据处理运行在特定的线程调度器Scheduler上。多次执行subscribeOn,只有一个起作用。
2:observeOn
接受一个Scheduler参数,用来指定下游订阅者操作运行在特定的线程调度器上。
Observable.just("song")
.subscribeOn(Schedulers.io()) //指定发射数据发生在io特性的线程调度器上,也就是发射是在Io新线程中
.observeOn(Schedulers.newThread()) //指定订阅者是执行在新的线程上。不是主线程
.subscribe(s -> System.out.println(s));
网友评论