class MyItem {
private param1, param2, param3;
}
MyItem item = new MyItem();
computeParam1(item);
computeParam2(item);
computeParam3(item);
waitForAllParamsToBeSet();
每个步骤彼此独立,每个步骤将参数写入对象作为最终结果。 这些方法与它们的逻辑完全不同,没有递归。
如果可能的话,我如何并行化这些步骤?
答案 0 :(得分:3)
启动Futures
,然后在分配前等待结果。
setTimout
答案 1 :(得分:2)
由于所有computeParamX()
接受一个MyItem
参数且返回无效,因此它们具有Consumer<MyItem>
的签名。因此,您可以将它们的执行并行化,并在.forEach()
并行流中调用它们,如下所示:
final MyItem item = new MyItem();
Stream.<Consumer<MyItem>>of(this::computeParam1, this::computeParam2, this::computeParam3)
.parallel()
.forEach(c -> c.accept(item));
由于.forEach()
是终端操作,它将阻塞直到所有操作完成,因此您可以在返回后安全地使用item
对象。
答案 2 :(得分:2)
在Java 8中,您可以简单地创建下一个任务集合:
Collection<Runnable> tasks = Arrays.asList(
() -> System.out.println("Compute param1"),
() -> System.out.println("Compute param2"),
() -> System.out.println("Compute param3")
);
然后并行启动任务
tasks.parallelStream().forEach(Runnable::run);