java的线程调度器_RxJava源码解析(二)—线程调度器Scheduler

本文详细探讨了RxJava中的线程调度器Scheduler,通过实例解析了如何使用observeOn方法指定数据处理和回调的线程。文章分析了lift函数的作用,OperatorObserveOn的实现,以及如何通过调度器创建新的线程执行回调操作。最后,介绍了如何自定义调度器实现线程管理。
摘要由CSDN通过智能技术生成

在RxJava中,有个很重要的概念叫做"线程调度器"—Scheduler。它用一种隐式的方法屏蔽掉了我们之前通过回调方式的线程调用。我们看个例子:

Observable ob = Observable.just("str1","str2");

ob.map(new Func1() {

@Override

public String call(String t) {

System.out.println("function call " + Thread.currentThread());

return "[" + t + "]";

}})

.observeOn(Schedulers.newThread())

.subscribe(new Subscriber() {

@Override

public void onCompleted() {}

@Override

public void onError(Throwable e) {}

@Override

public void onNext(String t) {

System.out.println("onNext call " + Thread.currentThread());

System.out.println("onNext "+t);

}

});

代码中,我们通过一个字符串生成了一个Observable对象,而这个对象我们又通过一个map映射映射成为一个新的Observable对象(这部分的知识请参照第一章RxJava源码解析(一)从一个例子开始)。在这之后,我们有通过调用observeOn方法设置了一个叫做Schedulers.newThread()的调度器。这个函数的目的是为了告诉你的被观察者,当你的数据返回的时候需要往哪个线程上post你的数据消息,换句话说,也就是你所定义的Subscriber对象的onCompleted/onError/onNext的执行线程。这段代码最后输出:

//output:

function call Thread[main,5,main]//map映射发生在默认线程也就是虚拟机主线程中

function call Thread[main,5,main]//map映射发生在默认线程也就是虚拟机主线程中

onNext call Thread[RxNewThreadScheduler-1,5,main] // 消息回调函数处理在一个新的线程中

onNext [str1]

onNext call Thread[RxNewThreadScheduler-1,5,main] // 消息回调函数处理在一个新的线程中

onNext [str2]

本章,我们将重点关注这个调度器,那么我们首先要思考的问题是,这个调度器将会提供什么功能呢?这就要回头看下我们能用这个调度器干什么了?

首先,我们需要调度器去帮助我们生成一个线程,并且在线程中去执行我们所书写的一些逻辑操作

其次,当我们以后得到了结果,我们还要需要调度器往调度器线程中发送一个消息,以便可以执行订阅者的回调函数

好的,基于我们上面的需求,我们将看下,在RxJava的调度器实现中,是如何实现我们所需要的功能的。

我们先来看下Observable对象所提供的observeOn函数,这个函数有多个函数重载,最终都会调用到三个参数的observeOn方法:

public final Observable observeOn(Scheduler scheduler, boolean delayError, int bufferSize) {

if (this instanceof ScalarSynchronousObservable) {

return ((ScalarSynchronousObservable)this).scalarScheduleOn(scheduler);

}

return lift(new OperatorObserveOn(scheduler, delayError, bufferSize));

}

这里调用到了RxJava中一个很重要的操作符号lift。lif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值