私はJavaのaggeragate操作のパフォーマンス評価を行ってコレクションを反復処理していました。私はパフォーマンスstream
とparallelStream
の評価をしていました。しかし、私はparallelStream
の出力がほとんどの時代で間違っていることを発見しました。JavaのparallelStreamが正しい結果を表示していません
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
以上80%未満からの間違った出力を得ましたか。 parallelStream
の正確性を保証する方法はありますか? ありがとう
ベンチマーク方法は無益です。それはあなたに答えを与えるでしょうが、彼らは間違っているでしょう。 https://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java –
ありがとう@BrianGoetz –
あなたの実際の質問が間違った結果を得ようとしているときは、無関係なベンチマークのものでそれを混乱させないでください。あなたのコードは10行に短縮される可能性があります。また、「パフォーマンス評価」を行っているあなたについての散文も時代遅れです。コードが正しく動作しない場合、そのパフォーマンスを測定する必要はありません。 – Holger