java的scheduler_RxJava之Schedulers

Schedulers是RxJava的主要组件之一。负责在不同线程上执行Observables的操作,便于将耗时任务分摊到其他线程。本文将会学习调度器的类型和使用场景。

IO

最常见的调度器之一。用于IO相关操作。比如网络请求和文件操作。IO 调度器背后由线程池支撑。

它首先创建一个工作线程,可以复用于其他操作。当然,当这个工作线程(长时间任务的情况)不能被复用时,会创建一个新的线程来处理其他操作。这个好处也会带来一些问题,因为它允许创建的线程是无限的,所以当创建大量线程的时候,会对整体性能造成一些影响。不过IO调度器仍然不失为一个好用的调度器。使用如下:

observable.subscribeOn(Schedulers.io())

Computation

这个调度器和IO调度器非常相似,因其也是由线程池支持的。然鹅,其可用的线程数是固定的,和系统的cpu核数目保持一致。所以如果你的手机是双核的,那么线程池中就有两个线程。这也意味着如果这两条线程都处于忙碌状态,那么该进程将会等待线程变成空闲状态的时候才能处理其他操作。因为这个限制,它不太适合IO相关操作。适用于进行一些计算操作,计算速度还很快。使用如下:

observable.subscribeOn(Schedulers.newThread())

Single

此款调度器非常简单,由一个线程支持。所以无论有多少个observables,都将只运行在这个线程上。也可将其认为是主线程的一个替代,使用如下:

observable.subscribeOn(Schedulers.single())

Immediate

此款调度器在当前活跃线程以阻塞的方式开始其任务(rxjava2已将其移除),无视当前运行的任务。使用如下:

observable.subscribeOn(Schedulers.immediate())

Trampoline

此款调度器运行在当前线程,所以如果你有代码运行在主线程上,它会将将要运行的代码块添加到主线程的队列。和Immediate非常相似,不同的是Immediate会阻塞此线程,而Trampoline会等待当前任务执行完成。适用用于不止一个observables,并且希望它们能够按照顺序执行的场景。

Observable.just(1,2,3,4)

.subscribeOn(Schedulers.trampoline())

.subscribe(onNext);

Observable.just( 5,6, 7,8, 9)

.subscribeOn(Schedulers.trampoline())

.subscribe(onNext);

Output:

Number = 1

Number = 2

Number = 3

Number = 4

Number = 5

Number = 6

Number = 7

Number = 8

Number = 9

使用如下:

observable.subscribeOn(Schedulers.trampoline())

Executor Scheduler

更像是一种自定义的IO调度器。我们可以通过制定线程池的大小来创建一个自定义的线程池。适用于observables的数量对于IO调度器太多的场景使用,使用如下:

val executor = Executors.newFixedThreadPool(10)

val pooledScheduler = Schedulers.from(executor)

Android Scheduler

由rxAndroid库提供,用于将操作切换到主线程以便操作ui,经常用于observeOn方法。使用如下:

AndroidSchedulers.mainThread()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值