gpt4 book ai didi

Java ParallelStream 未显示正确的结果

转载 作者:行者123 更新时间:2023-12-01 06:49:23 25 4
gpt4 key购买 nike

我正在对 Java 聚合操作进行一些性能评估,以迭代集合。我正在做性能评估streamparallelStream 。但我发现parallelStream的输出大多数时候都是错误的。例如,在下面的代码中,我从 parallelStream 得到了错误的输出超过 80% 的时间:

    public class ParallelStreamPerformance {
static int totaleven = 0;
public static void main(String[] args) {
List<Integer> randomList = new ArrayList<>();
Random rnd = new Random();
for(int i = 0 ;i < 1000;i++) {
int r = rnd.nextInt(500000);
randomList.add(r);
}

long s1 = System.currentTimeMillis();

randomList.stream().filter(e -> e%2 ==0).forEach(e -> count());
System.out.println("Even: "+totaleven);
long e1 = System.currentTimeMillis();
System.out.println(e1 - s1);

totaleven = 0;
long s2 = System.currentTimeMillis();

randomList.parallelStream().filter(e -> e%2 ==0).forEach(e -> count());
System.out.println("Even: "+totaleven);
long e2 = System.currentTimeMillis();
System.out.println(e2 - s2);
}
public static void count() {
totaleven++;
}
}

我的问题是:我正在使用 parallelStream以错误的方式?有没有办法保证parallelStream的正确性。谢谢

最佳答案

我认为您的代码有 count() 方法的问题。因为parallelStream将尝试同时执行任务。此方法应该是synchronized,或者您可以将totaleven 设置为原子整数。希望对您有所帮助。

关于Java ParallelStream 未显示正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718840/

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