gpt4 book ai didi

java - 为什么这个流不能并行运行?

转载 作者:行者123 更新时间:2023-12-02 03:34:09 25 4
gpt4 key购买 nike

如何让它并行运行?我的输出是完全连续的,直到一切完成后才会显示耗时。这是我第一次尝试并行化流,因此我可能错过了对其他人来说显而易见的东西。但与我查看的示例代码相比,我看不出有什么问题。

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));
}

}

最佳答案

但它是平行的!实验一下:

import java.util.*;
public class Paralells {

private int id;
public Paralells(int id) { this.id = id; }
void run() {
for (int i = 1; i<=1000; i++) System.out.println(id+" "+i);
}


public static void main(String[] args) {

ArrayList<Paralells> a = new ArrayList();

a.add(new Paralells(1));
a.add(new Paralells(2));
a.add(new Paralells(3));
a.add(new Paralells(4));
a.add(new Paralells(5));

long x = System.currentTimeMillis();
a.parallelStream().forEach(p -> p.run());
//a.forEach(p -> p.run()); // sequential
System.out.println("ELAPSED: " + (System.currentTimeMillis()-x));
}
}

为每个元素设置一个 id,并在打印消息时使用。您应该能够观察到消息是交错的。与顺序版本进行比较(取消注释相应的行并注释并行版本)。

当然,时间是在所有事情完成后收集的。时间在 forEach...

之后打印

关于java - 为什么这个流不能并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com