我有一个模拟长时间运行的睡眠方法。
private void sleep() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
然后我有一个方法返回一个Observable,其中包含参数中给出的2个字符串的列表。它在返回字符串之前调用sleep。
private Observable> getStrings(final String str1, final String str2) {
return Observable.fromCallable(new Callable>() {
@Override
public List call() {
sleep();
List strings = new ArrayList<>();
strings.add(str1);
strings.add(str2);
return strings;
}
});
}
然后,我在Observalb.zip中三次调用getStrings,我希望这三个调用可以并行运行,所以执行的总时间应该在 2秒
以内,也许最多是3秒,因为睡眠只有2秒。但是,总共需要 六 秒钟。 我如何使它并行运行,以便在2秒内完成?
Observable
.zip(getStrings("One", "Two"), getStrings("Three", "Four"), getStrings("Five", "Six"), mergeStringLists())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List strings) {
//Display the strings
}
});
mergeStringLists方法
private Func3, List, List, List> mergeStringLists() {
return new Func3, List, List, List>() {
@Override
public List call(List strings, List strings2, List strings3) {
Log.d(TAG, "...");
for (String s : strings2) {
strings.add(s);
}
for (String s : strings3) {
strings.add(s);
}
return strings;
}
};
}
本文发布于:2024-02-04 08:41:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170703338254048.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |