当前位置: 首页 > 知识库问答 >
问题:

Java parallelStream未显示正确结果[重复]

屠昌胤
2023-03-14

我正在做一些性能评估的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的正确性。谢谢

共有1个答案

宇文嘉勋
2023-03-14

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

 类似资料:
  • 有人能帮我吗?

  • 我想在一些ASP上使用声纳。Net应用程序。我已经安装了声纳并配置了C#environment,我让它工作了。。。除了FXcop(代码分析)。 我按照官方留档: 声纳跑步者。蝙蝠还好 FXCop路径配置良好 Sonnar runner正确启动FXcop(12.0) FXCop在中构建“FXCop report.xml”。项目声纳目录 这个文件包含一些我应该在Sonarqube中看到的“问题” FX

  • 我的数据库中只有大约16000个节点,当我匹配n返回n时,我从来没有得到任何图回来,任何原因或如何修复?

  • 我创建一个PHP计算器,需要使用以下类,然后打印出用户的名字和他们取得的平均分数。这是我到目前为止的代码,但是它没有正确显示,它说有丢失的参数和未定义的变量,但是我不确定我哪里出错了! 错误消息:警告:在C:\Program Files(x86)\EasyHP-DevServer-14.1VC11\data\localweb\my portable Files\练习4\average中调用的stu

  • 通过单击Experiment Parameters选项卡中的一个按钮(参见下面的屏幕截图),我创建并运行一个“PreviewAction”,它创建了一个新的选项卡,并用必要的组件填充它。下面是的代码。编辑:我还发布了一个自包含的最小版本,它模拟了真实项目中的条件,并展示了相同的行为。 这里至少存在两个问题: (或)根本不呈现 没有框架本身那么宽,我不知道为什么 我在挥杆方面不是很好,所以我可能错过