我正在做一些性能评估的Java阿格拉捷操作,以迭代集合。我正在评估stream
和ParallelStream
的性能。但是我发现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
设置为原子整数。希望有帮助。
有人能帮我吗?
知道如何解决吗?
我想在一些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”,它创建了一个新的选项卡,并用必要的组件填充它。下面是的代码。编辑:我还发布了一个自包含的最小版本,它模拟了真实项目中的条件,并展示了相同的行为。 这里至少存在两个问题: (或)根本不呈现 没有框架本身那么宽,我不知道为什么 我在挥杆方面不是很好,所以我可能错过