我是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。
答案 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)