【发布时间】:2016-06-05 19:05:25
【问题描述】:
如何让它并行运行?我的输出是完全连续的,并且在一切完成之前不会显示经过的时间。这是我第一次尝试并行化流,所以我可能遗漏了一些对其他人来说显而易见的东西。但与我查看的示例代码相比,我看不出有什么问题。
public class Paralells {
void run() {
for (int i = 1; i<=1000; i++) System.out.println(i);
}
public static void main(String[] args) {
ArrayList<Paralells> a = new ArrayList();
a.add(new Paralells());
a.add(new Paralells());
a.add(new Paralells());
a.add(new Paralells());
a.add(new Paralells());
long x = System.currentTimeMillis();
a.parallelStream().forEach(p -> p.run());
System.out.println("ELAPSED: " + (System.currentTimeMillis()-x));
}
}
【问题讨论】:
-
您将并行流与异步执行混淆了。
a.parallelStream().forEach(p -> p.run());不是异步执行的,它会等待操作完成后再打印"ELAPSED: ..."。但是管道本身是并行运行的;forEach会被不同的线程同时调用,例如尝试打印当前线程,你会看到它发生了变化。 -
现在我知道管道是并行的,但是直到管道完成后才会执行下一条语句,这让我有些困惑......
标签: java parallel-processing java-stream