RxJava Observables不平行

时间:2017-10-25 08:48:40

标签: rx-java2

我是RxJava的新手。

我正在执行基本代码:

public class App {

    public static void main(String... args) throws Exception {
        long startTime = System.currentTimeMillis();

        abcd().map(cnt -> cnt).subscribe((s) -> System.out.println(s));

        abcd().map(cnt -> cnt).subscribe(s -> System.out.println(s));

        long endTime = System.currentTimeMillis();
        long diff = endTime - startTime;
        System.out.println(diff);

    }

    public static Observable<Integer> abcd() {
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            System.out.println();
        }
        Observable<Integer> r = Observable.fromArray(10);
        return r;
    }
}

基本上创建了两个Observables&amp;两者都在处理1秒钟。 并且运行此代码的总时间超过2秒,这意味着两个Observable没有并行执行。

如何更改我的代码,以便执行的总时间为1秒,这意味着我的两个observable应该以并行方式执行。请将答案发给RxJava。

1 个答案:

答案 0 :(得分:0)

Observable创建Observable之前您正在睡觉,因此在发出结果之前它与abcd()进行处理并不完全相同。

您可以将Observable.merge( Observable.defer(() -> abcd()) .subscribeOn(Schedulers.io()) .map(cnt -> cnt) .doOnNext(System.out::println), Observable.defer(() -> abcd()) .subscribeOn(Schedulers.io()) .map(cnt -> cnt + 1) .doOnNext(System.out::println) ) .blockingSubscribe(ignored -> { }, Throwable::printStackTrace); 方法的执行推迟到后台线程,并等待两个子流终止:

lines=input("type your text :")
lines = lines.upper()     # changed here
print(lines)