Rxjava线程操作

目录
(一):Rx简介
(二):Rxjava基础知识
(三):Rxjava创建操作符
(四):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));

你可能感兴趣的:(Rxjava,Rxjava,rxjava,线程)