我有一个模拟长时间运行的睡眠方法。
private void sleep() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
然后我有一个方法返回一个Observable,其中包含参数中给出的2个字符串的列表。它在返回字符串之前调用sleep。
private Observable<List<String>> getStrings(final String str1, final String str2) {
return Observable.fromCallable(new Callable<List<String>>() {
@Override
public List<String> call() {
sleep();
List<String> 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<List<String>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<String> strings) {
//Display the strings
}
});
mergeStringLists方法
private Func3<List<String>, List<String>, List<String>, List<String>> mergeStringLists() {
return new Func3<List<String>, List<String>, List<String>, List<String>>() {
@Override
public List<String> call(List<String> strings, List<String> strings2, List<String> strings3) {
Log.d(TAG, "...");
for (String s : strings2) {
strings.add(s);
}
for (String s : strings3) {
strings.add(s);
}
return strings;
}
};
}
发生这种情况是因为订阅您的zipped
可观察性发生在同一io
线程中。
您为什么不试试这个呢?
Observable
.zip(
getStrings("One", "Two")
.subscribeOn(Schedulers.newThread()),
getStrings("Three", "Four")
.subscribeOn(Schedulers.newThread()),
getStrings("Five", "Six")
.subscribeOn(Schedulers.newThread()),
mergeStringLists())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<String>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<String> strings) {
//Display the strings
}
});
让我知道是否有帮助
我有一大堆Scalaz任务。创建方式如下: 我希望这些任务并行运行。以随机顺序打印数字,不要花5秒钟(每个任务有50个任务和100毫升睡眠)。 但是,很明显,每个任务需要100毫秒,所有任务都需要5秒钟,并且创建的列表是有序的。 如何并行运行它们?任务在哪里运行线程?
Spock规范如下所示: 是一个测试记录列表,对于该列表的每个成员,方法将按顺序运行。我想要的是,列表的前k个成员运行一个线程,下面的k个成员在第二个线程中运行,等等...理论上,使用Executors框架和类(因为Spock依赖于JUnit),这可以相对容易地完成。 然而,问题是如何将更小的注入到具有方法的类中,因为Spock不允许构造函数,而JUnitCore需要类名(具有测试/规范的类),而
现在我们有一个项目,包含两个工作。1) 是带有单元测试的标准构建。2) 是集成测试。它们是这样工作的: 构建整个项目,运行单元测试,启动集成测试工作 问题是步骤2)现在需要一个多小时才能运行,我想将集成测试并行化,以便它们花费更少的时间。但我不确定我该怎么做。我的第一个想法是,我可以有两个这样的步骤: 构建整个项目,运行单元测试,启动集成测试工作 构建整个项目,将其部署到integration s
请帮帮我.我创建了两个包含不同类的包。我的目的是并行运行这两个包(就像两个浏览器将打开,它应该并行运行),这些包中的类应该顺序运行。为此,我尝试使用两个xml。如下面所示,但它仍按顺序运行: null 因此,每个in类在运行时打开浏览器,然后在该类结束后关闭。 我希望我的com.testsuites.hdfs和com.testsuites.hive并行运行,并且里面的类应该顺序运行。请为我提出一个
问题内容: 我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。 我有这样的事情: 我想调用func1和func2并使它们同时运行。这些功能彼此之间或在同一对象上不相互作用。现在,我必须等待func1完成才能启动func2。我该如何执行以下操作: 我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。 问题答案: 你可以使用th
nightwatch.js与Browserstack的文档非常少。我目前使用Javascript设置了一个自动测试,并且这些测试被设置为在BrowserStack上运行。它循环遍历浏览器,并在不同的浏览器上重复运行测试,一次一个。如何使用nightwatch.js在Browserstack中运行并行测试? 我认为下面的settings.json设置正确,但请让我知道需要进行的更改。 下面是我的se