java 手动线程调度_[搞定开源04] 手动实现RxJava2线程切换

Android开源项目原理系列

干巴巴地看源码,理解得很模糊,亲自写一遍才知道真正掌握并不容易。折腾一天,模拟实现了RxJava最简单的入门例子,代码在这里,很水的。

发射一个数据,使用操作符map变换,产生数据运行在一个线程,消费数据运行在另一个线程。

Observable observable = Observable.just(10)

.map(integer -> {

System.out.println("[Operation] map at " + Thread.currentThread().getName());

return String.valueOf(integer * integer);

}).subscribeOn(new NewThreadScheduler("subscribeOnThread"))

.observeOn(new NewThreadScheduler("observeOnThread"));

Observer observer = new Observer() {

@Override

public void onSubscribe(Disposable disposable) {

System.out.println("[onSubscribe] at " + Thread.currentThread().getName() + " upstream[" + disposable.getClass().getSimpleName() + "]");

}

@Override

public void onNext(String value) {

System.out.println("[onNext] value [" + value + "] at " + Thread.currentThread().getName());

}

@Override

public void onError(Throwable e) {

System.out.println("[onError] -> " + e.getMessage());

}

@Override

public void onComplete() {

System.out.println("[onComplete] at " + Thread.currentThread().getName());

}

};

observable.subscribe(observer);

try {

TimeUnit.SECONDS.sleep(2);

} catch (InterruptedException e) {

e.printStackTrace();

}

运行结果很明确,just和map操作运行在subscribeOnThread,onNext和onComplete运行在observeOnThread。

[Operation] just at subscribeOnThread-1

[Operation] map at subscribeOnThread-1

[onNext] value [100] at observeOnThread-1

[onComplete] at observeOnThread-1

在模仿RxJava的过程中,不过多考虑代码扩展和并发问题,不一定和RxJava源码对象一一对应,在保持思想一致的基础上,分析最核心的骨骼。

1、Observer

Observer是观察者,定义为一个接口,提供的函数是熟悉的onSubscribe、onNext、onError、onComplete。

public interface Observer {

void onSubscribe(Disposable disposable);

void onNext(T t);

void onError(Throwable e);

void onComplete();

}

订阅后,触发onSubscribe,得到Disposable(我叫它可中止对象)。

public interface Disposable {

void dispose();

boolean isDisposed();

}

RxJava在链式执行和线程调度时,可以随时调用disposable.dispose()中止执行,因此内部很多对象需要实现Disposable接口。

2、Observable

public abstract class Observable {

public final void subscribe(Observer super T> observer) {

subscribeActual(observer);

}

abstract void subscribeActual(Observer super T> observer);

public static Observable just(T value) {

return new ObservableJust(value);

}

}

Observable是被观察者,被Observer这个观察者订阅,最核心的订阅函数subscribe理论应该定义在Observer,但为了保持链式结构,现在定义在Observable。这里subscribe简单地调用subscribeActual,subscribeActual作为抽

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值